ರಾಫ್ಟ್ ವಿತರಿಸಿದ ಸಹಮತ ಅಲ್ಗಾರಿದಮ್, ಅದರ ಮೂಲ ತತ್ವಗಳು, ಕಾರ್ಯಾಚರಣೆಯ ಹಂತಗಳು, ಅನುಷ್ಠಾನದ ಪರಿಗಣನೆಗಳು, ಮತ್ತು ಸ್ಥಿತಿಸ್ಥಾಪಕ, ಜಾಗತಿಕವಾಗಿ ಸ್ಕೇಲೆಬಲ್ ಸಿಸ್ಟಮ್ಗಳನ್ನು ನಿರ್ಮಿಸಲು ಅದರ ನೈಜ-ಪ್ರಪಂಚದ ಅನ್ವಯಗಳನ್ನು ಅನ್ವೇಷಿಸಿ.
ವಿತರಿಸಿದ ಸಹಮತದಲ್ಲಿ ಪಾಂಡಿತ್ಯ: ಜಾಗತಿಕ ಸಿಸ್ಟಮ್ಗಳಿಗಾಗಿ ರಾಫ್ಟ್ ಅಲ್ಗಾರಿದಮ್ ಅನುಷ್ಠಾನದ ಆಳವಾದ ನೋಟ
ನಮ್ಮ ಹೆಚ್ಚುತ್ತಿರುವ ಅಂತರ್ಸಂಪರ್ಕಿತ ಜಗತ್ತಿನಲ್ಲಿ, ವಿತರಿಸಿದ ಸಿಸ್ಟಮ್ಗಳು ಇ-ಕಾಮರ್ಸ್ ಪ್ಲಾಟ್ಫಾರ್ಮ್ಗಳು ಮತ್ತು ಹಣಕಾಸು ಸಂಸ್ಥೆಗಳಿಂದ ಹಿಡಿದು ಕ್ಲೌಡ್ ಕಂಪ್ಯೂಟಿಂಗ್ ಮೂಲಸೌಕರ್ಯ ಮತ್ತು ನೈಜ-ಸಮಯದ ಸಂವಹನ ಸಾಧನಗಳವರೆಗೆ ಪ್ರತಿಯೊಂದು ಡಿಜಿಟಲ್ ಸೇವೆಯ ಬೆನ್ನೆಲುಬಾಗಿದೆ. ಈ ಸಿಸ್ಟಮ್ಗಳು ಅನೇಕ ಯಂತ್ರಗಳಲ್ಲಿ ಕೆಲಸದ ಹೊರೆ ಮತ್ತು ಡೇಟಾವನ್ನು ವಿತರಿಸುವ ಮೂಲಕ ಸಾಟಿಯಿಲ್ಲದ ಸ್ಕೇಲೆಬಿಲಿಟಿ, ಲಭ್ಯತೆ ಮತ್ತು ಸ್ಥಿತಿಸ್ಥಾಪಕತ್ವವನ್ನು ನೀಡುತ್ತವೆ. ಆದಾಗ್ಯೂ, ಈ ಶಕ್ತಿಯೊಂದಿಗೆ ಒಂದು ಮಹತ್ವದ ಸವಾಲು ಬರುತ್ತದೆ: ನೆಟ್ವರ್ಕ್ ವಿಳಂಬಗಳು, ನೋಡ್ ವೈಫಲ್ಯಗಳು ಮತ್ತು ಏಕಕಾಲೀನ ಕಾರ್ಯಾಚರಣೆಗಳ ನಡುವೆಯೂ ಸಿಸ್ಟಮ್ನ ಸ್ಥಿತಿಯ ಬಗ್ಗೆ ಎಲ್ಲಾ ಘಟಕಗಳು ಒಪ್ಪಿಕೊಳ್ಳುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುವುದು. ಈ ಮೂಲಭೂತ ಸಮಸ್ಯೆಯನ್ನು ವಿತರಿಸಿದ ಸಹಮತ (distributed consensus) ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ.
ಅಸಮಕಾಲಿಕ, ವೈಫಲ್ಯ-ಪೀಡಿತ ವಿತರಿಸಿದ ಪರಿಸರದಲ್ಲಿ ಸಹಮತವನ್ನು ಸಾಧಿಸುವುದು ಅತ್ಯಂತ ಸಂಕೀರ್ಣವಾಗಿದೆ. ದಶಕಗಳ ಕಾಲ, ಪ್ಯಾಕ್ಸೋಸ್ (Paxos) ಈ ಸವಾಲನ್ನು ಪರಿಹರಿಸಲು ಪ್ರಬಲ ಅಲ್ಗಾರಿದಮ್ ಆಗಿತ್ತು, ಅದರ ಸೈದ್ಧಾಂತಿಕ ದೃಢತೆಗೆ ಗೌರವಿಸಲ್ಪಟ್ಟರೂ, ಅದರ ಸಂಕೀರ್ಣತೆ ಮತ್ತು ಅನುಷ್ಠಾನದ ಕಷ್ಟಕ್ಕಾಗಿ ಆಗಾಗ್ಗೆ ಟೀಕಿಸಲ್ಪಟ್ಟಿತು. ನಂತರ ರಾಫ್ಟ್ (Raft) ಬಂದಿತು, ಇದು ಪ್ರಾಥಮಿಕ ಗುರಿಯೊಂದಿಗೆ ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಅಲ್ಗಾರಿದಮ್: ಸುಲಭವಾಗಿ ಅರ್ಥವಾಗುವಿಕೆ (understandability). ರಾಫ್ಟ್ ದೋಷ ಸಹಿಷ್ಣುತೆ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಯ ದೃಷ್ಟಿಯಿಂದ ಪ್ಯಾಕ್ಸೋಸ್ಗೆ ಸಮನಾಗಿರಲು ಗುರಿ ಹೊಂದಿದೆ ಆದರೆ ಡೆವಲಪರ್ಗಳಿಗೆ ಗ್ರಹಿಸಲು ಮತ್ತು ಅದರ ಮೇಲೆ ನಿರ್ಮಿಸಲು ಹೆಚ್ಚು ಸುಲಭವಾಗುವಂತೆ ರಚಿಸಲಾಗಿದೆ.
ಈ ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿ ರಾಫ್ಟ್ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಆಳವಾಗಿ ಪರಿಶೀಲಿಸುತ್ತದೆ, ಅದರ ಮೂಲಭೂತ ತತ್ವಗಳು, ಕಾರ್ಯಾಚರಣೆಯ ಯಾಂತ್ರಿಕತೆ, ಪ್ರಾಯೋಗಿಕ ಅನುಷ್ಠಾನದ ಪರಿಗಣನೆಗಳು, ಮತ್ತು ದೃಢವಾದ, ಜಾಗತಿಕವಾಗಿ ವಿತರಿಸಿದ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸುವಲ್ಲಿ ಅದರ ಪ್ರಮುಖ ಪಾತ್ರವನ್ನು ಅನ್ವೇಷಿಸುತ್ತದೆ. ನೀವು ಅನುಭವಿ ಆರ್ಕಿಟೆಕ್ಟ್, ವಿತರಿಸಿದ ಸಿಸ್ಟಮ್ಸ್ ಇಂಜಿನಿಯರ್, ಅಥವಾ ಹೆಚ್ಚು ಲಭ್ಯವಿರುವ ಸೇವೆಗಳನ್ನು ನಿರ್ಮಿಸಲು ಬಯಸುವ ಡೆವಲಪರ್ ಆಗಿರಲಿ, ರಾಫ್ಟ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಆಧುನಿಕ ಕಂಪ್ಯೂಟಿಂಗ್ನ ಸಂಕೀರ್ಣತೆಗಳನ್ನು ಕರಗತ ಮಾಡಿಕೊಳ್ಳುವ ನಿಟ್ಟಿನಲ್ಲಿ ಒಂದು ಅತ್ಯಗತ್ಯ ಹೆಜ್ಜೆಯಾಗಿದೆ.
ಆಧುನಿಕ ಆರ್ಕಿಟೆಕ್ಚರ್ಗಳಲ್ಲಿ ವಿತರಿಸಿದ ಸಹಮತದ ಅನಿವಾರ್ಯ ಅಗತ್ಯ
ಸೆಕೆಂಡಿಗೆ ಲಕ್ಷಾಂತರ ವಹಿವಾಟುಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವ ಜಾಗತಿಕ ಇ-ಕಾಮರ್ಸ್ ಪ್ಲಾಟ್ಫಾರ್ಮ್ ಅನ್ನು ಕಲ್ಪಿಸಿಕೊಳ್ಳಿ. ಗ್ರಾಹಕರ ಡೇಟಾ, ದಾಸ್ತಾನು ಮಟ್ಟಗಳು, ಆರ್ಡರ್ ಸ್ಥಿತಿಗಳು—ಎಲ್ಲವೂ ಖಂಡಗಳಾದ್ಯಂತ ಹರಡಿರುವ ಹಲವಾರು ಡೇಟಾ ಸೆಂಟರ್ಗಳಲ್ಲಿ ಸ್ಥಿರವಾಗಿರಬೇಕು. ಬ್ಯಾಂಕಿಂಗ್ ಸಿಸ್ಟಮ್ನ ಲೆಡ್ಜರ್, ಅನೇಕ ಸರ್ವರ್ಗಳಲ್ಲಿ ಹರಡಿಕೊಂಡಿದ್ದು, ಖಾತೆಯ ಬ್ಯಾಲೆನ್ಸ್ನಲ್ಲಿ ಒಂದು ಕ್ಷಣದ ಭಿನ್ನಾಭಿಪ್ರಾಯವನ್ನು ಸಹ ಸಹಿಸಲಾಗುವುದಿಲ್ಲ. ಈ ಸನ್ನಿವೇಶಗಳು ವಿತರಿಸಿದ ಸಹಮತದ ನಿರ್ಣಾಯಕ ಪ್ರಾಮುಖ್ಯತೆಯನ್ನು ಎತ್ತಿ ತೋರಿಸುತ್ತವೆ.
ವಿತರಿಸಿದ ಸಿಸ್ಟಮ್ಗಳ ಅಂತರ್ಗತ ಸವಾಲುಗಳು
ವಿತರಿಸಿದ ಸಿಸ್ಟಮ್ಗಳು, ತಮ್ಮ ಸ್ವಭಾವತಃ, ಏಕಶಿಲೆಯ ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ ಇಲ್ಲದ ಅಸಂಖ್ಯಾತ ಸವಾಲುಗಳನ್ನು ಪರಿಚಯಿಸುತ್ತವೆ. ರಾಫ್ಟ್ನಂತಹ ಅಲ್ಗಾರಿದಮ್ಗಳ ಸೊಬಗು ಮತ್ತು ಅವಶ್ಯಕತೆಯನ್ನು ಪ್ರಶಂಸಿಸಲು ಈ ಸವಾಲುಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ನಿರ್ಣಾಯಕವಾಗಿದೆ:
- ಭಾಗಶಃ ವೈಫಲ್ಯಗಳು (Partial Failures): ಒಂದೇ ಸರ್ವರ್ ಕೆಲಸ ಮಾಡುತ್ತದೆ ಅಥವಾ ಸಂಪೂರ್ಣವಾಗಿ ವಿಫಲವಾಗುವುದಕ್ಕಿಂತ ಭಿನ್ನವಾಗಿ, ವಿತರಿಸಿದ ಸಿಸ್ಟಮ್ನಲ್ಲಿ ಕೆಲವು ನೋಡ್ಗಳು ವಿಫಲವಾಗಬಹುದು ಮತ್ತು ಇತರವುಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಲೇ ಇರುತ್ತವೆ. ಒಂದು ಸರ್ವರ್ ಕ್ರ್ಯಾಶ್ ಆಗಬಹುದು, ಅದರ ನೆಟ್ವರ್ಕ್ ಸಂಪರ್ಕವು ಕಳೆದುಹೋಗಬಹುದು, ಅಥವಾ ಅದರ ಡಿಸ್ಕ್ ಹಾಳಾಗಬಹುದು, ಇದೆಲ್ಲವೂ ಕ್ಲಸ್ಟರ್ನ ಉಳಿದ ಭಾಗವು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿರುವಾಗ ಸಂಭವಿಸಬಹುದು. ಈ ಭಾಗಶಃ ವೈಫಲ್ಯಗಳ ಹೊರತಾಗಿಯೂ ಸಿಸ್ಟಮ್ ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದನ್ನು ಮುಂದುವರಿಸಬೇಕು.
- ನೆಟ್ವರ್ಕ್ ವಿಭಜನೆಗಳು (Network Partitions): ನೋಡ್ಗಳನ್ನು ಸಂಪರ್ಕಿಸುವ ನೆಟ್ವರ್ಕ್ ಯಾವಾಗಲೂ ವಿಶ್ವಾಸಾರ್ಹವಾಗಿರುವುದಿಲ್ಲ. ನೋಡ್ಗಳ ಉಪವಿಭಾಗಗಳ ನಡುವಿನ ಸಂವಹನವು ಕಡಿತಗೊಂಡಾಗ ನೆಟ್ವರ್ಕ್ ವಿಭಜನೆ ಸಂಭವಿಸುತ್ತದೆ, ಇದರಿಂದಾಗಿ ಕೆಲವು ನೋಡ್ಗಳು ಇನ್ನೂ ಚಾಲನೆಯಲ್ಲಿದ್ದರೂ ಸಹ ಅವು ವಿಫಲವಾದಂತೆ ಕಾಣಿಸುತ್ತದೆ. ಈ "ಸ್ಪ್ಲಿಟ್-ಬ್ರೈನ್" ಸನ್ನಿವೇಶಗಳನ್ನು ಪರಿಹರಿಸುವುದು, ಅಲ್ಲಿ ಸಿಸ್ಟಮ್ನ ವಿವಿಧ ಭಾಗಗಳು ಹಳೆಯ ಅಥವಾ ಅಸಮಂಜಸವಾದ ಮಾಹಿತಿಯ ಆಧಾರದ ಮೇಲೆ ಸ್ವತಂತ್ರವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ, ಇದು ಒಂದು ಪ್ರಮುಖ ಸಹಮತದ ಸಮಸ್ಯೆಯಾಗಿದೆ.
- ಅಸಮಕಾಲಿಕ ಸಂವಹನ (Asynchronous Communication): ನೋಡ್ಗಳ ನಡುವಿನ ಸಂದೇಶಗಳು ವಿಳಂಬವಾಗಬಹುದು, ಮರುಕ್ರಮಗೊಳಿಸಬಹುದು, ಅಥವಾ ಸಂಪೂರ್ಣವಾಗಿ ಕಳೆದುಹೋಗಬಹುದು. ಜಾಗತಿಕ ಗಡಿಯಾರ ಅಥವಾ ಸಂದೇಶ ವಿತರಣಾ ಸಮಯದ ಬಗ್ಗೆ ಯಾವುದೇ ಗ್ಯಾರಂಟಿ ಇಲ್ಲ, ಇದು ಘಟನೆಗಳ ಸ್ಥಿರವಾದ ಕ್ರಮವನ್ನು ಅಥವಾ ನಿರ್ಣಾಯಕ ಸಿಸ್ಟಮ್ ಸ್ಥಿತಿಯನ್ನು ಸ್ಥಾಪಿಸಲು ಕಷ್ಟಕರವಾಗಿಸುತ್ತದೆ.
- ಏಕಕಾಲೀನತೆ (Concurrency): ಅನೇಕ ನೋಡ್ಗಳು ಒಂದೇ ಡೇಟಾವನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಲು ಅಥವಾ ಏಕಕಾಲದಲ್ಲಿ ಕ್ರಿಯೆಗಳನ್ನು ಪ್ರಾರಂಭಿಸಲು ಪ್ರಯತ್ನಿಸಬಹುದು. ಈ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಸಮನ್ವಯಗೊಳಿಸಲು ಯಾವುದೇ ಯಾಂತ್ರಿಕತೆ ಇಲ್ಲದಿದ್ದರೆ, ಸಂಘರ್ಷಗಳು ಮತ್ತು ಅಸಂಗತತೆಗಳು ಅನಿವಾರ್ಯ.
- ಅನಿರೀಕ್ಷಿತ ಲೇಟೆನ್ಸಿ (Unpredictable Latency): ವಿಶೇಷವಾಗಿ ಜಾಗತಿಕವಾಗಿ ವಿತರಿಸಿದ ನಿಯೋಜನೆಗಳಲ್ಲಿ, ನೆಟ್ವರ್ಕ್ ಲೇಟೆನ್ಸಿ ಗಮನಾರ್ಹವಾಗಿ ಬದಲಾಗಬಹುದು. ಒಂದು ಪ್ರದೇಶದಲ್ಲಿ ವೇಗವಾಗಿರುವ ಕಾರ್ಯಾಚರಣೆಗಳು ಇನ್ನೊಂದು ಪ್ರದೇಶದಲ್ಲಿ ನಿಧಾನವಾಗಬಹುದು, ಇದು ನಿರ್ಧಾರ ತೆಗೆದುಕೊಳ್ಳುವ ಪ್ರಕ್ರಿಯೆಗಳು ಮತ್ತು ಸಮನ್ವಯದ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ.
ಸಹಮತವು ವಿಶ್ವಾಸಾರ್ಹತೆಯ ಮೂಲಾಧಾರ ಏಕೆ
ಸಹಮತ ಅಲ್ಗಾರಿದಮ್ಗಳು ಈ ಸವಾಲುಗಳನ್ನು ಪರಿಹರಿಸಲು ಒಂದು ಮೂಲಭೂತ ನಿರ್ಮಾಣ ಬ್ಲಾಕ್ ಅನ್ನು ಒದಗಿಸುತ್ತವೆ. ಅವು ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ ಘಟಕಗಳ ಸಂಗ್ರಹವನ್ನು ಒಟ್ಟಾರೆಯಾಗಿ ಒಂದೇ, ಅತ್ಯಂತ ವಿಶ್ವಾಸಾರ್ಹ, ಮತ್ತು ಸುಸಂಬದ್ಧ ಘಟಕವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತವೆ. ನಿರ್ದಿಷ್ಟವಾಗಿ, ಸಹಮತವು ಈ ಕೆಳಗಿನವುಗಳನ್ನು ಸಾಧಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ:
- ಸ್ಟೇಟ್ ಮೆಷಿನ್ ರೆಪ್ಲಿಕೇಶನ್ (SMR): ಅನೇಕ ದೋಷ-ಸಹಿಷ್ಣು ವಿತರಿಸಿದ ಸಿಸ್ಟಮ್ಗಳ ಹಿಂದಿನ ಪ್ರಮುಖ ಕಲ್ಪನೆ. ಎಲ್ಲಾ ನೋಡ್ಗಳು ಕಾರ್ಯಾಚರಣೆಗಳ ಕ್ರಮದ ಬಗ್ಗೆ ಒಪ್ಪಿಕೊಂಡರೆ, ಮತ್ತು ಪ್ರತಿಯೊಂದು ನೋಡ್ ಒಂದೇ ಆರಂಭಿಕ ಸ್ಥಿತಿಯಲ್ಲಿ ಪ್ರಾರಂಭಿಸಿ ಆ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಒಂದೇ ಕ್ರಮದಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳಿಸಿದರೆ, ಎಲ್ಲಾ ನೋಡ್ಗಳು ಒಂದೇ ಅಂತಿಮ ಸ್ಥಿತಿಗೆ ಬರುತ್ತವೆ. ಈ ಜಾಗತಿಕ ಕಾರ್ಯಾಚರಣೆಗಳ ಕ್ರಮದ ಬಗ್ಗೆ ಒಪ್ಪಿಕೊಳ್ಳುವ ಯಾಂತ್ರಿಕತೆಯೇ ಸಹಮತ.
- ಹೆಚ್ಚಿನ ಲಭ್ಯತೆ (High Availability): ಅಲ್ಪಸಂಖ್ಯಾತ ನೋಡ್ಗಳು ವಿಫಲವಾದರೂ ಸಿಸ್ಟಮ್ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದನ್ನು ಮುಂದುವರಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುವ ಮೂಲಕ, ಸಹಮತವು ಸೇವೆಗಳು ಪ್ರವೇಶಿಸಬಹುದಾದ ಮತ್ತು ಕ್ರಿಯಾತ್ಮಕವಾಗಿ ಉಳಿಯುವುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ, ಡೌನ್ಟೈಮ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.
- ಡೇಟಾ ಸ್ಥಿರತೆ (Data Consistency): ಡೇಟಾದ ಎಲ್ಲಾ ಪ್ರತಿಗಳು ಸಿಂಕ್ರೊನೈಸ್ ಆಗಿರುವುದನ್ನು ಇದು ಖಾತರಿಪಡಿಸುತ್ತದೆ, ಸಂಘರ್ಷದ ಅಪ್ಡೇಟ್ಗಳನ್ನು ತಡೆಯುತ್ತದೆ ಮತ್ತು ಕ್ಲೈಂಟ್ಗಳು ಯಾವಾಗಲೂ ಅತ್ಯಂತ ನವೀಕೃತ ಮತ್ತು ಸರಿಯಾದ ಮಾಹಿತಿಯನ್ನು ಓದುವುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ.
- ದೋಷ ಸಹಿಷ್ಣುತೆ (Fault Tolerance): ಸಿಸ್ಟಮ್ ನಿರ್ದಿಷ್ಟ ಸಂಖ್ಯೆಯ ಅನಿಯಂತ್ರಿತ ನೋಡ್ ವೈಫಲ್ಯಗಳನ್ನು (ಸಾಮಾನ್ಯವಾಗಿ ಕ್ರ್ಯಾಶ್ ವೈಫಲ್ಯಗಳು) ಸಹಿಸಿಕೊಳ್ಳಬಲ್ಲದು ಮತ್ತು ಮಾನವ ಹಸ್ತಕ್ಷೇಪವಿಲ್ಲದೆ ಪ್ರಗತಿ ಸಾಧಿಸುವುದನ್ನು ಮುಂದುವರಿಸುತ್ತದೆ.
ರಾಫ್ಟ್ ಪರಿಚಯ: ಸಹಮತಕ್ಕೆ ಸುಲಭವಾಗಿ ಅರ್ಥವಾಗುವ ವಿಧಾನ
ರಾಫ್ಟ್ ಒಂದು ಸ್ಪಷ್ಟ ಉದ್ದೇಶದೊಂದಿಗೆ ಶೈಕ್ಷಣಿಕ ಜಗತ್ತಿನಿಂದ ಹೊರಹೊಮ್ಮಿತು: ವಿತರಿಸಿದ ಸಹಮತವನ್ನು ಸುಲಭವಾಗಿ ತಲುಪುವಂತೆ ಮಾಡುವುದು. ಅದರ ಲೇಖಕರಾದ ಡಿಯಾಗೋ ಒಂಗಾರೋ ಮತ್ತು ಜಾನ್ ಔಸ್ಟರ್ಹೌಟ್, ರಾಫ್ಟ್ ಅನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಸುಲಭವಾಗಿ ಅರ್ಥವಾಗುವಂತೆ ವಿನ್ಯಾಸಗೊಳಿಸಿದರು, ಸಹಮತ ಅಲ್ಗಾರಿದಮ್ಗಳ ಹೆಚ್ಚು ವ್ಯಾಪಕವಾದ ಅಳವಡಿಕೆ ಮತ್ತು ಸರಿಯಾದ ಅನುಷ್ಠಾನವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವ ಗುರಿಯೊಂದಿಗೆ.
ರಾಫ್ಟ್ನ ಮೂಲ ವಿನ್ಯಾಸ ತತ್ವ: ಮೊದಲು ಸುಲಭವಾಗಿ ಅರ್ಥವಾಗುವಿಕೆ
ರಾಫ್ಟ್ ಸಹಮತದ ಸಂಕೀರ್ಣ ಸಮಸ್ಯೆಯನ್ನು ಹಲವಾರು ತುಲನಾತ್ಮಕವಾಗಿ ಸ್ವತಂತ್ರ ಉಪ-ಸಮಸ್ಯೆಗಳಾಗಿ ವಿಭಜಿಸುತ್ತದೆ, ಪ್ರತಿಯೊಂದಕ್ಕೂ ತನ್ನದೇ ಆದ ನಿರ್ದಿಷ್ಟ ನಿಯಮಗಳು ಮತ್ತು ನಡವಳಿಕೆಗಳ ಸಮೂಹವಿದೆ. ಈ ಮಾಡ್ಯುಲಾರಿಟಿಯು ಗ್ರಹಿಕೆಗೆ ಗಮನಾರ್ಹವಾಗಿ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಪ್ರಮುಖ ವಿನ್ಯಾಸ ತತ್ವಗಳು ಸೇರಿವೆ:
- ನಾಯಕ-ಕೇಂದ್ರಿತ ವಿಧಾನ (Leader-Centric Approach): ಇತರ ಕೆಲವು ಸಹಮತ ಅಲ್ಗಾರಿದಮ್ಗಳಂತೆ, ಅಲ್ಲಿ ಎಲ್ಲಾ ನೋಡ್ಗಳು ನಿರ್ಧಾರ ತೆಗೆದುಕೊಳ್ಳುವಲ್ಲಿ ಸಮಾನವಾಗಿ ಭಾಗವಹಿಸುತ್ತವೆ, ರಾಫ್ಟ್ ಒಬ್ಬನೇ ನಾಯಕನನ್ನು (leader) ನೇಮಿಸುತ್ತದೆ. ನಾಯಕನು ಪುನರಾವರ್ತಿತ ಲಾಗ್ ಅನ್ನು ನಿರ್ವಹಿಸಲು ಮತ್ತು ಎಲ್ಲಾ ಕ್ಲೈಂಟ್ ವಿನಂತಿಗಳನ್ನು ಸಮನ್ವಯಗೊಳಿಸಲು ಜವಾಬ್ದಾರನಾಗಿರುತ್ತಾನೆ. ಇದು ಲಾಗ್ ನಿರ್ವಹಣೆಯನ್ನು ಸರಳಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ನೋಡ್ಗಳ ನಡುವಿನ ಸಂವಹನಗಳ ಸಂಕೀರ್ಣತೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.
- ಬಲವಾದ ನಾಯಕ (Strong Leader): ಹೊಸ ಲಾಗ್ ನಮೂದುಗಳನ್ನು ಪ್ರಸ್ತಾಪಿಸಲು ಮತ್ತು ಅವು ಯಾವಾಗ ಕಮಿಟ್ ಆಗುತ್ತವೆ ಎಂದು ನಿರ್ಧರಿಸಲು ನಾಯಕನೇ ಅಂತಿಮ ಅಧಿಕಾರ. ಅನುಯಾಯಿಗಳು (followers) ನಿಷ್ಕ್ರಿಯವಾಗಿ ನಾಯಕನ ಲಾಗ್ ಅನ್ನು ಪುನರಾವರ್ತಿಸುತ್ತಾರೆ ಮತ್ತು ನಾಯಕನ ವಿನಂತಿಗಳಿಗೆ ಪ್ರತಿಕ್ರಿಯಿಸುತ್ತಾರೆ.
- ನಿರ್ಣಾಯಕ ಚುನಾವಣೆಗಳು (Deterministic Elections): ರಾಫ್ಟ್ ಯಾದೃಚ್ಛಿಕ ಚುನಾವಣಾ ಕಾಲಾವಧಿಯನ್ನು (randomized election timeout) ಬಳಸುತ್ತದೆ, ಇದರಿಂದಾಗಿ ಸಾಮಾನ್ಯವಾಗಿ ಒಂದು ಚುನಾವಣಾ ಅವಧಿಯಲ್ಲಿ ಒಬ್ಬ ಅಭ್ಯರ್ಥಿ ಮಾತ್ರ ನಾಯಕನಾಗಿ ಹೊರಹೊಮ್ಮುತ್ತಾನೆ.
- ಲಾಗ್ ಸ್ಥಿರತೆ (Log Consistency): ರಾಫ್ಟ್ ತನ್ನ ಪುನರಾವರ್ತಿತ ಲಾಗ್ನಲ್ಲಿ ಬಲವಾದ ಸ್ಥಿರತೆಯ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಜಾರಿಗೊಳಿಸುತ್ತದೆ, ಕಮಿಟ್ ಆದ ನಮೂದುಗಳನ್ನು ಎಂದಿಗೂ ಹಿಂತೆಗೆದುಕೊಳ್ಳಲಾಗುವುದಿಲ್ಲ ಮತ್ತು ಎಲ್ಲಾ ಕಮಿಟ್ ಆದ ನಮೂದುಗಳು ಅಂತಿಮವಾಗಿ ಲಭ್ಯವಿರುವ ಎಲ್ಲಾ ನೋಡ್ಗಳಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.
ಪ್ಯಾಕ್ಸೋಸ್ನೊಂದಿಗೆ ಸಂಕ್ಷಿಪ್ತ ಹೋಲಿಕೆ
ರಾಫ್ಟ್ಗಿಂತ ಮೊದಲು, ಪ್ಯಾಕ್ಸೋಸ್ ವಿತರಿಸಿದ ಸಹಮತಕ್ಕಾಗಿ ವಾಸ್ತವಿಕ ಮಾನದಂಡವಾಗಿತ್ತು. ಶಕ್ತಿಯುತವಾಗಿದ್ದರೂ, ಪ್ಯಾಕ್ಸೋಸ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಮತ್ತು ಸರಿಯಾಗಿ ಕಾರ್ಯಗತಗೊಳಿಸಲು ಕುಖ್ಯಾತವಾಗಿ ಕಷ್ಟ. ಅದರ ವಿನ್ಯಾಸ, ಪಾತ್ರಗಳನ್ನು (ಪ್ರಸ್ತಾಪಕ, ಸ್ವೀಕರಿಸುವವ, ಕಲಿಯುವವ) ಪ್ರತ್ಯೇಕಿಸುತ್ತದೆ ಮತ್ತು ಏಕಕಾಲದಲ್ಲಿ ಅನೇಕ ನಾಯಕರು ಅಸ್ತಿತ್ವದಲ್ಲಿರಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ (ಆದರೂ ಒಬ್ಬರು ಮಾತ್ರ ಮೌಲ್ಯವನ್ನು ಕಮಿಟ್ ಮಾಡಬಹುದು), ಸಂಕೀರ್ಣ ಸಂವಹನಗಳು ಮತ್ತು ಎಡ್ಜ್ ಕೇಸ್ಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು.
ರಾಫ್ಟ್, ಇದಕ್ಕೆ ವಿರುದ್ಧವಾಗಿ, ಸ್ಟೇಟ್ ಸ್ಪೇಸ್ ಅನ್ನು ಸರಳಗೊಳಿಸುತ್ತದೆ. ಇದು ಬಲವಾದ ನಾಯಕ ಮಾದರಿಯನ್ನು ಜಾರಿಗೊಳಿಸುತ್ತದೆ, ಅಲ್ಲಿ ನಾಯಕನು ಎಲ್ಲಾ ಲಾಗ್ ಬದಲಾವಣೆಗಳಿಗೆ ಜವಾಬ್ದಾರನಾಗಿರುತ್ತಾನೆ. ಇದು ಪಾತ್ರಗಳನ್ನು (ನಾಯಕ, ಅನುಯಾಯಿ, ಅಭ್ಯರ್ಥಿ) ಮತ್ತು ಅವುಗಳ ನಡುವಿನ ಪರಿವರ್ತನೆಗಳನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ. ಈ ರಚನೆಯು ರಾಫ್ಟ್ನ ನಡವಳಿಕೆಯನ್ನು ಹೆಚ್ಚು ಅರ್ಥಗರ್ಭಿತ ಮತ್ತು ತಾರ್ಕಿಕವಾಗಿ ಸುಲಭವಾಗಿಸುತ್ತದೆ, ಇದು ಕಡಿಮೆ ಅನುಷ್ಠಾನ ದೋಷಗಳಿಗೆ ಮತ್ತು ವೇಗದ ಅಭಿವೃದ್ಧಿ ಚಕ್ರಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ. ಆರಂಭದಲ್ಲಿ ಪ್ಯಾಕ್ಸೋಸ್ನೊಂದಿಗೆ ಹೆಣಗಾಡಿದ ಅನೇಕ ನೈಜ-ಪ್ರಪಂಚದ ಸಿಸ್ಟಮ್ಗಳು ರಾಫ್ಟ್ ಅನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳುವ ಮೂಲಕ ಯಶಸ್ಸನ್ನು ಕಂಡುಕೊಂಡಿವೆ.
ರಾಫ್ಟ್ನಲ್ಲಿನ ಮೂರು ಮೂಲಭೂತ ಪಾತ್ರಗಳು
ಯಾವುದೇ ಸಮಯದಲ್ಲಿ, ರಾಫ್ಟ್ ಕ್ಲಸ್ಟರ್ನಲ್ಲಿರುವ ಪ್ರತಿಯೊಂದು ಸರ್ವರ್ ಮೂರು ಸ್ಥಿತಿಗಳಲ್ಲಿ ಒಂದರಲ್ಲಿರುತ್ತದೆ: ನಾಯಕ (Leader), ಅನುಯಾಯಿ (Follower), ಅಥವಾ ಅಭ್ಯರ್ಥಿ (Candidate). ಈ ಪಾತ್ರಗಳು ಪ್ರತ್ಯೇಕ ಮತ್ತು ಕ್ರಿಯಾತ್ಮಕವಾಗಿದ್ದು, ಸರ್ವರ್ಗಳು ನಿರ್ದಿಷ್ಟ ನಿಯಮಗಳು ಮತ್ತು ಘಟನೆಗಳ ಆಧಾರದ ಮೇಲೆ ಅವುಗಳ ನಡುವೆ ಪರಿವರ್ತನೆಗೊಳ್ಳುತ್ತವೆ.
1. ಅನುಯಾಯಿ (Follower)
- ನಿಷ್ಕ್ರಿಯ ಪಾತ್ರ: ಅನುಯಾಯಿಗಳು ರಾಫ್ಟ್ನಲ್ಲಿ ಅತ್ಯಂತ ನಿಷ್ಕ್ರಿಯ ಸ್ಥಿತಿಯಲ್ಲಿದ್ದಾರೆ. ಅವರು ಕೇವಲ ನಾಯಕರು ಮತ್ತು ಅಭ್ಯರ್ಥಿಗಳಿಂದ ಬರುವ ವಿನಂತಿಗಳಿಗೆ ಪ್ರತಿಕ್ರಿಯಿಸುತ್ತಾರೆ.
-
ಹಾರ್ಟ್ಬೀಟ್ಗಳನ್ನು ಸ್ವೀಕರಿಸುವುದು: ಅನುಯಾಯಿ ನಿಯಮಿತ ಮಧ್ಯಂತರಗಳಲ್ಲಿ ನಾಯಕನಿಂದ ಹಾರ್ಟ್ಬೀಟ್ಗಳನ್ನು (ಖಾಲಿ AppendEntries RPC ಗಳು) ಸ್ವೀಕರಿಸಲು ನಿರೀಕ್ಷಿಸುತ್ತದೆ. ಅನುಯಾಯಿ ಒಂದು ನಿರ್ದಿಷ್ಟ
election timeoutಅವಧಿಯೊಳಗೆ ಹಾರ್ಟ್ಬೀಟ್ ಅಥವಾ AppendEntries RPC ಅನ್ನು ಸ್ವೀಕರಿಸದಿದ್ದರೆ, ಅದು ನಾಯಕ ವಿಫಲವಾಗಿದೆ ಎಂದು ಭಾವಿಸಿ ಅಭ್ಯರ್ಥಿ ಸ್ಥಿತಿಗೆ ಪರಿವರ್ತನೆಗೊಳ್ಳುತ್ತದೆ. - ಮತದಾನ: ಒಂದು ಚುನಾವಣೆಯ ಸಮಯದಲ್ಲಿ, ಅನುಯಾಯಿ ಪ್ರತಿ ಅವಧಿಗೆ ಗರಿಷ್ಠ ಒಬ್ಬ ಅಭ್ಯರ್ಥಿಗೆ ಮತ ಹಾಕುತ್ತಾನೆ.
- ಲಾಗ್ ಪುನರಾವರ್ತನೆ: ಅನುಯಾಯಿಗಳು ನಾಯಕನ ಸೂಚನೆಯಂತೆ ತಮ್ಮ ಸ್ಥಳೀಯ ಲಾಗ್ಗೆ ಲಾಗ್ ನಮೂದುಗಳನ್ನು ಸೇರಿಸುತ್ತಾರೆ.
2. ಅಭ್ಯರ್ಥಿ (Candidate)
- ಚುನಾವಣೆಗಳನ್ನು ಪ್ರಾರಂಭಿಸುವುದು: ಅನುಯಾಯಿ ಸಮಯ ಮೀರುವಾಗ (ನಾಯಕನಿಂದ ಕೇಳಿಸದಿದ್ದಾಗ), ಅದು ಹೊಸ ಚುನಾವಣೆಯನ್ನು ಪ್ರಾರಂಭಿಸಲು ಅಭ್ಯರ್ಥಿ ಸ್ಥಿತಿಗೆ ಪರಿವರ್ತನೆಗೊಳ್ಳುತ್ತದೆ.
-
ಸ್ವಯಂ-ಮತದಾನ: ಅಭ್ಯರ್ಥಿಯು ತನ್ನ
current termಅನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ, ತನಗೇ ಮತ ಹಾಕುತ್ತದೆ, ಮತ್ತು ಕ್ಲಸ್ಟರ್ನಲ್ಲಿರುವ ಎಲ್ಲಾ ಇತರ ಸರ್ವರ್ಗಳಿಗೆRequestVoteRPC ಗಳನ್ನು ಕಳುಹಿಸುತ್ತದೆ. - ಚುನಾವಣೆಯನ್ನು ಗೆಲ್ಲುವುದು: ಅಭ್ಯರ್ಥಿಯು ಒಂದೇ ಅವಧಿಗೆ ಕ್ಲಸ್ಟರ್ನಲ್ಲಿರುವ ಬಹುಪಾಲು ಸರ್ವರ್ಗಳಿಂದ ಮತಗಳನ್ನು ಪಡೆದರೆ, ಅದು ನಾಯಕ ಸ್ಥಿತಿಗೆ ಪರಿವರ್ತನೆಗೊಳ್ಳುತ್ತದೆ.
- ಕೆಳಗಿಳಿಯುವುದು: ಅಭ್ಯರ್ಥಿಯು ಹೆಚ್ಚಿನ ಅವಧಿಯಿರುವ ಇನ್ನೊಂದು ಸರ್ವರ್ ಅನ್ನು ಪತ್ತೆ ಮಾಡಿದರೆ, ಅಥವಾ ಕಾನೂನುಬದ್ಧ ನಾಯಕನಿಂದ AppendEntries RPC ಅನ್ನು ಸ್ವೀಕರಿಸಿದರೆ, ಅದು ಅನುಯಾಯಿ ಸ್ಥಿತಿಗೆ ಹಿಂತಿರುಗುತ್ತದೆ.
3. ನಾಯಕ (Leader)
- ಏಕೈಕ ಅಧಿಕಾರ: ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ರಾಫ್ಟ್ ಕ್ಲಸ್ಟರ್ನಲ್ಲಿ ಒಬ್ಬನೇ ನಾಯಕ ಇರುತ್ತಾನೆ (ಒಂದು ನಿರ್ದಿಷ್ಟ ಅವಧಿಗೆ). ನಾಯಕನು ಎಲ್ಲಾ ಕ್ಲೈಂಟ್ ಸಂವಹನಗಳು, ಲಾಗ್ ಪುನರಾವರ್ತನೆ, ಮತ್ತು ಸ್ಥಿರತೆಯನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಜವಾಬ್ದಾರನಾಗಿರುತ್ತಾನೆ.
-
ಹಾರ್ಟ್ಬೀಟ್ಗಳನ್ನು ಕಳುಹಿಸುವುದು: ನಾಯಕನು ತನ್ನ ಅಧಿಕಾರವನ್ನು ಉಳಿಸಿಕೊಳ್ಳಲು ಮತ್ತು ಹೊಸ ಚುನಾವಣೆಗಳನ್ನು ತಡೆಯಲು ಎಲ್ಲಾ ಅನುಯಾಯಿಗಳಿಗೆ ನಿಯತಕಾಲಿಕವಾಗಿ
AppendEntriesRPC ಗಳನ್ನು (ಹಾರ್ಟ್ಬೀಟ್ಗಳು) ಕಳುಹಿಸುತ್ತಾನೆ. - ಲಾಗ್ ನಿರ್ವಹಣೆ: ನಾಯಕನು ಕ್ಲೈಂಟ್ ವಿನಂತಿಗಳನ್ನು ಸ್ವೀಕರಿಸುತ್ತಾನೆ, ಹೊಸ ಲಾಗ್ ನಮೂದುಗಳನ್ನು ತನ್ನ ಸ್ಥಳೀಯ ಲಾಗ್ಗೆ ಸೇರಿಸುತ್ತಾನೆ, ಮತ್ತು ನಂತರ ಈ ನಮೂದುಗಳನ್ನು ಎಲ್ಲಾ ಅನುಯಾಯಿಗಳಿಗೆ ಪುನರಾವರ್ತಿಸುತ್ತಾನೆ.
- ಕಮಿಟ್ಮೆಂಟ್: ಒಂದು ನಮೂದು ಬಹುಪಾಲು ಸರ್ವರ್ಗಳಿಗೆ ಸುರಕ್ಷಿತವಾಗಿ ಪುನರಾವರ್ತನೆಯಾದಾಗ ಮತ್ತು ಸ್ಟೇಟ್ ಮೆಷಿನ್ಗೆ ಕಮಿಟ್ ಮಾಡಬಹುದಾದಾಗ ನಾಯಕ ನಿರ್ಧರಿಸುತ್ತಾನೆ.
-
ಕೆಳಗಿಳಿಯುವುದು: ನಾಯಕನು ಹೆಚ್ಚಿನ
termಹೊಂದಿರುವ ಸರ್ವರ್ ಅನ್ನು ಪತ್ತೆ ಮಾಡಿದರೆ, ಅದು ತಕ್ಷಣವೇ ಕೆಳಗಿಳಿದು ಅನುಯಾಯಿ ಸ್ಥಿತಿಗೆ ಹಿಂತಿರುಗುತ್ತದೆ. ಇದು ಸಿಸ್ಟಮ್ ಯಾವಾಗಲೂ ಅತಿ ಹೆಚ್ಚು ತಿಳಿದಿರುವ ಅವಧಿಯೊಂದಿಗೆ ಪ್ರಗತಿ ಸಾಧಿಸುವುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ.
ರಾಫ್ಟ್ನ ಕಾರ್ಯಾಚರಣೆಯ ಹಂತಗಳು: ವಿವರವಾದ ವಿಮರ್ಶೆ
ರಾಫ್ಟ್ ನಾಯಕನ ಚುನಾವಣೆ ಮತ್ತು ಲಾಗ್ ಪುನರಾವರ್ತನೆಯ ನಿರಂತರ ಚಕ್ರದ ಮೂಲಕ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಈ ಎರಡು ಪ್ರಾಥಮಿಕ ಯಾಂತ್ರಿಕತೆಗಳು, ನಿರ್ಣಾಯಕ ಸುರಕ್ಷತಾ ಗುಣಲಕ್ಷಣಗಳೊಂದಿಗೆ, ಕ್ಲಸ್ಟರ್ ಸ್ಥಿರತೆ ಮತ್ತು ದೋಷ ಸಹಿಷ್ಣುತೆಯನ್ನು ನಿರ್ವಹಿಸುವುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತವೆ.
1. ನಾಯಕನ ಚುನಾವಣೆ (Leader Election)
ನಾಯಕನ ಚುನಾವಣಾ ಪ್ರಕ್ರಿಯೆಯು ರಾಫ್ಟ್ನ ಕಾರ್ಯಾಚರಣೆಗೆ ಮೂಲಭೂತವಾಗಿದೆ, ಕ್ಲಸ್ಟರ್ ಯಾವಾಗಲೂ ಕ್ರಿಯೆಗಳನ್ನು ಸಮನ್ವಯಗೊಳಿಸಲು ಒಂದೇ, ಅಧಿಕೃತ ನೋಡ್ ಅನ್ನು ಹೊಂದಿದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.
-
ಚುನಾವಣಾ ಕಾಲಾವಧಿ (Election Timeout): ಪ್ರತಿಯೊಂದು ಅನುಯಾಯಿ ಯಾದೃಚ್ಛಿಕ
election timeoutಅನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ (ಸಾಮಾನ್ಯವಾಗಿ 150-300ms). ಅನುಯಾಯಿಯು ಈ ಕಾಲಾವಧಿಯೊಳಗೆ ಪ್ರಸ್ತುತ ನಾಯಕನಿಂದ ಯಾವುದೇ ಸಂವಹನವನ್ನು (ಹಾರ್ಟ್ಬೀಟ್ ಅಥವಾ AppendEntries RPC) ಸ್ವೀಕರಿಸದಿದ್ದರೆ, ಅದು ನಾಯಕ ವಿಫಲವಾಗಿದೆ ಅಥವಾ ನೆಟ್ವರ್ಕ್ ವಿಭಜನೆ ಸಂಭವಿಸಿದೆ ಎಂದು ಭಾವಿಸುತ್ತದೆ. -
ಅಭ್ಯರ್ಥಿಗೆ ಪರಿವರ್ತನೆ: ಸಮಯ ಮೀರಿದ ನಂತರ, ಅನುಯಾಯಿ
Candidateಸ್ಥಿತಿಗೆ ಪರಿವರ್ತನೆಗೊಳ್ಳುತ್ತದೆ. ಅದು ತನ್ನcurrent termಅನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ, ತನಗೇ ಮತ ಹಾಕುತ್ತದೆ, ಮತ್ತು ತನ್ನ ಚುನಾವಣಾ ಟೈಮರ್ ಅನ್ನು ಮರುಹೊಂದಿಸುತ್ತದೆ. -
RequestVote RPC: ಅಭ್ಯರ್ಥಿಯು ನಂತರ ಕ್ಲಸ್ಟರ್ನಲ್ಲಿರುವ ಎಲ್ಲಾ ಇತರ ಸರ್ವರ್ಗಳಿಗೆ
RequestVoteRPC ಗಳನ್ನು ಕಳುಹಿಸುತ್ತದೆ. ಈ RPC ಅಭ್ಯರ್ಥಿಯcurrent term, ಅದರcandidateId, ಮತ್ತು ಅದರlast log indexಮತ್ತುlast log termಬಗ್ಗೆ ಮಾಹಿತಿಯನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ (ಇದು ಸುರಕ್ಷತೆಗಾಗಿ ಏಕೆ ನಿರ್ಣಾಯಕವಾಗಿದೆ ಎಂಬುದರ ಕುರಿತು ನಂತರ ಇನ್ನಷ್ಟು). -
ಮತದಾನ ನಿಯಮಗಳು: ಒಂದು ಸರ್ವರ್ ಈ ಕೆಳಗಿನ ಷರತ್ತುಗಳನ್ನು ಪೂರೈಸಿದರೆ ಅಭ್ಯರ್ಥಿಗೆ ತನ್ನ ಮತವನ್ನು ನೀಡುತ್ತದೆ:
-
ಅದರ
current termಅಭ್ಯರ್ಥಿಯ ಅವಧಿಗಿಂತ ಕಡಿಮೆ ಅಥವಾ ಸಮನಾಗಿದ್ದರೆ. - ಅದು ಪ್ರಸ್ತುತ ಅವಧಿಯಲ್ಲಿ ಬೇರೆ ಅಭ್ಯರ್ಥಿಗೆ ಇನ್ನೂ ಮತ ಹಾಕಿಲ್ಲದಿದ್ದರೆ.
-
ಅಭ್ಯರ್ಥಿಯ ಲಾಗ್ ತನ್ನದೇ ಆದ ಲಾಗ್ನಷ್ಟೇ ನವೀಕೃತವಾಗಿದ್ದರೆ. ಇದನ್ನು ಮೊದಲು
last log termಹೋಲಿಸುವ ಮೂಲಕ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ, ನಂತರ ಅವಧಿಗಳು ಒಂದೇ ಆಗಿದ್ದರೆlast log indexಹೋಲಿಸಲಾಗುತ್ತದೆ. ಒಬ್ಬ ಅಭ್ಯರ್ಥಿಯು "ಅಪ್-ಟು-ಡೇಟ್" ಆಗಿರುತ್ತಾನೆ, ಅವನ ಲಾಗ್ ಮತದಾರನ ಲಾಗ್ನಲ್ಲಿರುವ ಎಲ್ಲಾ ಕಮಿಟ್ ಆದ ನಮೂದುಗಳನ್ನು ಹೊಂದಿದ್ದರೆ. ಇದನ್ನು ಚುನಾವಣಾ ನಿರ್ಬಂಧ (election restriction) ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ ಮತ್ತು ಇದು ಸುರಕ್ಷತೆಗಾಗಿ ನಿರ್ಣಾಯಕವಾಗಿದೆ.
-
ಅದರ
-
ಚುನಾವಣೆಯನ್ನು ಗೆಲ್ಲುವುದು: ಅಭ್ಯರ್ಥಿಯು ಒಂದೇ ಅವಧಿಗೆ ಕ್ಲಸ್ಟರ್ನಲ್ಲಿರುವ ಬಹುಪಾಲು ಸರ್ವರ್ಗಳಿಂದ ಮತಗಳನ್ನು ಪಡೆದರೆ ಹೊಸ ನಾಯಕನಾಗುತ್ತಾನೆ. ಒಮ್ಮೆ ಆಯ್ಕೆಯಾದ ನಂತರ, ಹೊಸ ನಾಯಕನು ತನ್ನ ಅಧಿಕಾರವನ್ನು ಸ್ಥಾಪಿಸಲು ಮತ್ತು ಹೊಸ ಚುನಾವಣೆಗಳನ್ನು ತಡೆಯಲು ತಕ್ಷಣವೇ ಎಲ್ಲಾ ಇತರ ಸರ್ವರ್ಗಳಿಗೆ
AppendEntriesRPC ಗಳನ್ನು (ಹಾರ್ಟ್ಬೀಟ್ಗಳು) ಕಳುಹಿಸುತ್ತಾನೆ. - ವಿಭಜಿತ ಮತಗಳು ಮತ್ತು ಮರುಪ್ರಯತ್ನಗಳು: ಏಕಕಾಲದಲ್ಲಿ ಅನೇಕ ಅಭ್ಯರ್ಥಿಗಳು ಹೊರಹೊಮ್ಮಲು ಸಾಧ್ಯವಿದೆ, ಇದು ವಿಭಜಿತ ಮತಕ್ಕೆ ಕಾರಣವಾಗುತ್ತದೆ, ಅಲ್ಲಿ ಯಾವುದೇ ಅಭ್ಯರ್ಥಿಗೆ ಬಹುಮತ ಸಿಗುವುದಿಲ್ಲ. ಇದನ್ನು ಪರಿಹರಿಸಲು, ಪ್ರತಿಯೊಂದು ಅಭ್ಯರ್ಥಿಗೆ ಯಾದೃಚ್ಛಿಕ ಚುನಾವಣಾ ಕಾಲಾವಧಿ ಇರುತ್ತದೆ. ಅಭ್ಯರ್ಥಿಯ ಕಾಲಾವಧಿ ಚುನಾವಣೆಯನ್ನು ಗೆಲ್ಲದೆ ಅಥವಾ ಹೊಸ ನಾಯಕನಿಂದ ಕೇಳದೆ ಮುಗಿದುಹೋದರೆ, ಅದು ತನ್ನ ಅವಧಿಯನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ ಮತ್ತು ಹೊಸ ಚುನಾವಣೆಯನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ. ಯಾದೃಚ್ಛಿಕತೆಯು ವಿಭಜಿತ ಮತಗಳು ಅಪರೂಪ ಮತ್ತು ತ್ವರಿತವಾಗಿ ಪರಿಹರಿಸಲ್ಪಡುತ್ತವೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.
-
ಹೆಚ್ಚಿನ ಅವಧಿಗಳನ್ನು ಪತ್ತೆಹಚ್ಚುವುದು: ಅಭ್ಯರ್ಥಿಯು (ಅಥವಾ ಯಾವುದೇ ಸರ್ವರ್) ತನ್ನ ಸ್ವಂತ
current termಗಿಂತ ಹೆಚ್ಚಿನtermಹೊಂದಿರುವ RPC ಅನ್ನು ಸ್ವೀಕರಿಸಿದರೆ, ಅದು ತಕ್ಷಣವೇ ತನ್ನcurrent termಅನ್ನು ಹೆಚ್ಚಿನ ಮೌಲ್ಯಕ್ಕೆ ನವೀಕರಿಸುತ್ತದೆ ಮತ್ತುfollowerಸ್ಥಿತಿಗೆ ಹಿಂತಿರುಗುತ್ತದೆ. ಇದು ಹಳೆಯ ಮಾಹಿತಿಯಿರುವ ಸರ್ವರ್ ನಾಯಕನಾಗಲು ಅಥವಾ ಕಾನೂನುಬದ್ಧ ನಾಯಕನಿಗೆ ಅಡ್ಡಿಪಡಿಸಲು ಪ್ರಯತ್ನಿಸುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.
2. ಲಾಗ್ ಪುನರಾವರ್ತನೆ (Log Replication)
ಒಮ್ಮೆ ನಾಯಕನು ಆಯ್ಕೆಯಾದ ನಂತರ, ಅವನ ಪ್ರಾಥಮಿಕ ಜವಾಬ್ದಾರಿಯು ಪುನರಾವರ್ತಿತ ಲಾಗ್ ಅನ್ನು ನಿರ್ವಹಿಸುವುದು ಮತ್ತು ಕ್ಲಸ್ಟರ್ನಾದ್ಯಂತ ಸ್ಥಿರತೆಯನ್ನು ಖಚಿತಪಡಿಸುವುದು. ಇದು ಕ್ಲೈಂಟ್ ಆದೇಶಗಳನ್ನು ಸ್ವೀಕರಿಸುವುದು, ಅವುಗಳನ್ನು ತನ್ನ ಲಾಗ್ಗೆ ಸೇರಿಸುವುದು, ಮತ್ತು ಅವುಗಳನ್ನು ಅನುಯಾಯಿಗಳಿಗೆ ಪುನರಾವರ್ತಿಸುವುದನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ.
- ಕ್ಲೈಂಟ್ ವಿನಂತಿಗಳು: ಎಲ್ಲಾ ಕ್ಲೈಂಟ್ ವಿನಂತಿಗಳು (ಸ್ಟೇಟ್ ಮೆಷಿನ್ನಿಂದ ಕಾರ್ಯಗತಗೊಳಿಸಬೇಕಾದ ಆದೇಶಗಳು) ನಾಯಕನಿಗೆ ನಿರ್ದೇಶಿಸಲ್ಪಡುತ್ತವೆ. ಕ್ಲೈಂಟ್ ಅನುಯಾಯಿಯನ್ನು ಸಂಪರ್ಕಿಸಿದರೆ, ಅನುಯಾಯಿ ವಿನಂತಿಯನ್ನು ಪ್ರಸ್ತುತ ನಾಯಕನಿಗೆ ಮರುನಿರ್ದೇಶಿಸುತ್ತಾನೆ.
-
ನಾಯಕನ ಲಾಗ್ಗೆ ಸೇರಿಸುವುದು: ನಾಯಕನು ಕ್ಲೈಂಟ್ ಆದೇಶವನ್ನು ಸ್ವೀಕರಿಸಿದಾಗ, ಅವನು ಆದೇಶವನ್ನು ಹೊಸ
log entryಆಗಿ ತನ್ನ ಸ್ಥಳೀಯ ಲಾಗ್ಗೆ ಸೇರಿಸುತ್ತಾನೆ. ಪ್ರತಿಯೊಂದು ಲಾಗ್ ನಮೂದು ಆದೇಶ, ಅದು ಸ್ವೀಕರಿಸಿದterm, ಮತ್ತು ಅದರlog indexಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. -
AppendEntries RPC: ನಾಯಕನು ನಂತರ ಎಲ್ಲಾ ಅನುಯಾಯಿಗಳಿಗೆ
AppendEntriesRPC ಗಳನ್ನು ಕಳುಹಿಸುತ್ತಾನೆ, ಹೊಸ ಲಾಗ್ ನಮೂದನ್ನು (ಅಥವಾ ನಮೂದುಗಳ ಬ್ಯಾಚ್) ತಮ್ಮ ಲಾಗ್ಗಳಿಗೆ ಸೇರಿಸಲು ವಿನಂತಿಸುತ್ತಾನೆ. ಈ RPC ಗಳು ಸೇರಿವೆ:-
term: ನಾಯಕನ ಪ್ರಸ್ತುತ ಅವಧಿ. -
leaderId: ನಾಯಕನ ಐಡಿ (ಅನುಯಾಯಿಗಳು ಕ್ಲೈಂಟ್ಗಳನ್ನು ಮರುನಿರ್ದೇಶಿಸಲು). -
prevLogIndex: ಹೊಸ ನಮೂದುಗಳಿಗೆ ತಕ್ಷಣವೇ ಹಿಂದಿನ ಲಾಗ್ ನಮೂದಿನ ಇಂಡೆಕ್ಸ್. -
prevLogTerm:prevLogIndexನಮೂದಿನ ಅವಧಿ. ಈ ಎರಡು (prevLogIndex,prevLogTerm) ಲಾಗ್ ಹೊಂದಾಣಿಕೆಯ ಗುಣಲಕ್ಷಣಕ್ಕೆ ನಿರ್ಣಾಯಕವಾಗಿವೆ. -
entries[]: ಸಂಗ್ರಹಿಸಬೇಕಾದ ಲಾಗ್ ನಮೂದುಗಳು (ಹಾರ್ಟ್ಬೀಟ್ಗಳಿಗೆ ಖಾಲಿ). -
leaderCommit: ನಾಯಕನcommitIndex(ಕಮಿಟ್ ಆಗಿದೆ ಎಂದು ತಿಳಿದಿರುವ ಅತಿ ಹೆಚ್ಚಿನ ಲಾಗ್ ನಮೂದಿನ ಇಂಡೆಕ್ಸ್).
-
-
ಸ್ಥಿರತೆ ಪರಿಶೀಲನೆ (ಲಾಗ್ ಹೊಂದಾಣಿಕೆ ಗುಣಲಕ್ಷಣ): ಅನುಯಾಯಿಯು
AppendEntriesRPC ಅನ್ನು ಸ್ವೀಕರಿಸಿದಾಗ, ಅದು ಸ್ಥಿರತೆ ಪರಿಶೀಲನೆಯನ್ನು ಮಾಡುತ್ತದೆ. ಅದು ತನ್ನ ಲಾಗ್prevLogIndexನಲ್ಲಿprevLogTermಗೆ ಹೊಂದಿಕೆಯಾಗುವ ಅವಧಿಯೊಂದಿಗೆ ನಮೂದನ್ನು ಹೊಂದಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸುತ್ತದೆ. ಈ ಪರಿಶೀಲನೆ ವಿಫಲವಾದರೆ, ಅನುಯಾಯಿAppendEntriesRPC ಅನ್ನು ತಿರಸ್ಕರಿಸುತ್ತದೆ, ನಾಯಕನಿಗೆ ತನ್ನ ಲಾಗ್ ಅಸಮಂಜಸವಾಗಿದೆ ಎಂದು ತಿಳಿಸುತ್ತದೆ. -
ಅಸಂಗತತೆಗಳನ್ನು ಪರಿಹರಿಸುವುದು: ಅನುಯಾಯಿಯು
AppendEntriesRPC ಅನ್ನು ತಿರಸ್ಕರಿಸಿದರೆ, ನಾಯಕನು ಆ ಅನುಯಾಯಿಗಾಗಿnextIndexಅನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತಾನೆ ಮತ್ತುAppendEntriesRPC ಅನ್ನು ಮರುಪ್ರಯತ್ನಿಸುತ್ತಾನೆ.nextIndexಎಂದರೆ ನಾಯಕನು ನಿರ್ದಿಷ್ಟ ಅನುಯಾಯಿಗೆ ಕಳುಹಿಸುವ ಮುಂದಿನ ಲಾಗ್ ನಮೂದಿನ ಇಂಡೆಕ್ಸ್. ನಾಯಕ ಮತ್ತು ಅನುಯಾಯಿಯ ಲಾಗ್ಗಳು ಹೊಂದಿಕೆಯಾಗುವ ಹಂತಕ್ಕೆnextIndexತಲುಪುವವರೆಗೆ ಈ ಪ್ರಕ್ರಿಯೆಯು ಮುಂದುವರಿಯುತ್ತದೆ. ಒಮ್ಮೆ ಹೊಂದಾಣಿಕೆ ಕಂಡುಬಂದ ನಂತರ, ಅನುಯಾಯಿ ನಂತರದ ಲಾಗ್ ನಮೂದುಗಳನ್ನು ಸ್ವೀಕರಿಸಬಹುದು, ಅಂತಿಮವಾಗಿ ತನ್ನ ಲಾಗ್ ಅನ್ನು ನಾಯಕನ ಲಾಗ್ನೊಂದಿಗೆ ಸ್ಥಿರಗೊಳಿಸುತ್ತದೆ. -
ನಮೂದುಗಳನ್ನು ಕಮಿಟ್ ಮಾಡುವುದು: ಒಂದು ನಮೂದು ಕಮಿಟ್ ಆಗಿದೆ ಎಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ, ನಾಯಕನು ಅದನ್ನು ಬಹುಪಾಲು ಸರ್ವರ್ಗಳಿಗೆ (ತನ್ನನ್ನೂ ಒಳಗೊಂಡಂತೆ) ಯಶಸ್ವಿಯಾಗಿ ಪುನರಾವರ್ತಿಸಿದಾಗ. ಒಮ್ಮೆ ಕಮಿಟ್ ಆದ ನಂತರ, ನಮೂದನ್ನು ಸ್ಥಳೀಯ ಸ್ಟೇಟ್ ಮೆಷಿನ್ಗೆ ಅನ್ವಯಿಸಬಹುದು. ನಾಯಕನು ತನ್ನ
commitIndexಅನ್ನು ನವೀಕರಿಸುತ್ತಾನೆ ಮತ್ತು ಇದನ್ನು ನಂತರದAppendEntriesRPC ಗಳಲ್ಲಿ ಸೇರಿಸುತ್ತಾನೆ, ಅನುಯಾಯಿಗಳಿಗೆ ಕಮಿಟ್ ಆದ ನಮೂದುಗಳ ಬಗ್ಗೆ ತಿಳಿಸಲು. ಅನುಯಾಯಿಗಳು ನಾಯಕನleaderCommitಆಧಾರದ ಮೇಲೆ ತಮ್ಮcommitIndexಅನ್ನು ನವೀಕರಿಸುತ್ತಾರೆ ಮತ್ತು ಆ ಇಂಡೆಕ್ಸ್ವರೆಗೆ ನಮೂದುಗಳನ್ನು ತಮ್ಮ ಸ್ಟೇಟ್ ಮೆಷಿನ್ಗೆ ಅನ್ವಯಿಸುತ್ತಾರೆ. - ನಾಯಕನ ಸಂಪೂರ್ಣತೆ ಗುಣಲಕ್ಷಣ (Leader Completeness Property): ರಾಫ್ಟ್ ಒಂದು ನಿರ್ದಿಷ್ಟ ಅವಧಿಯಲ್ಲಿ ಲಾಗ್ ನಮೂದು ಕಮಿಟ್ ಆಗಿದ್ದರೆ, ಎಲ್ಲಾ ನಂತರದ ನಾಯಕರು ಆ ಲಾಗ್ ನಮೂದನ್ನು ಹೊಂದಿರಬೇಕು ಎಂದು ಖಾತರಿಪಡಿಸುತ್ತದೆ. ಈ ಗುಣಲಕ್ಷಣವನ್ನು ಚುನಾವಣಾ ನಿರ್ಬಂಧದಿಂದ ಜಾರಿಗೊಳಿಸಲಾಗುತ್ತದೆ: ಅಭ್ಯರ್ಥಿಯು ತನ್ನ ಲಾಗ್ ಬಹುಪಾಲು ಇತರ ಸರ್ವರ್ಗಳಷ್ಟೇ ನವೀಕೃತವಾಗಿದ್ದರೆ ಮಾತ್ರ ಚುನಾವಣೆಯನ್ನು ಗೆಲ್ಲಬಹುದು. ಇದು ಕಮಿಟ್ ಆದ ನಮೂದುಗಳನ್ನು ಕಡೆಗಣಿಸಬಹುದಾದ ಅಥವಾ ಕಳೆದುಕೊಳ್ಳಬಹುದಾದ ನಾಯಕನ ಆಯ್ಕೆಯನ್ನು ತಡೆಯುತ್ತದೆ.
3. ಸುರಕ್ಷತಾ ಗುಣಲಕ್ಷಣಗಳು ಮತ್ತು ಖಾತರಿಗಳು
ರಾಫ್ಟ್ನ ದೃಢತೆಯು ಹಲವಾರು ಎಚ್ಚರಿಕೆಯಿಂದ ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಸುರಕ್ಷತಾ ಗುಣಲಕ್ಷಣಗಳಿಂದ ಬರುತ್ತದೆ, ಅದು ಅಸಂಗತತೆಗಳನ್ನು ತಡೆಯುತ್ತದೆ ಮತ್ತು ಡೇಟಾ ಸಮಗ್ರತೆಯನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ:
- ಚುನಾವಣಾ ಸುರಕ್ಷತೆ: ಒಂದು ನಿರ್ದಿಷ್ಟ ಅವಧಿಯಲ್ಲಿ ಗರಿಷ್ಠ ಒಬ್ಬ ನಾಯಕನನ್ನು ಆಯ್ಕೆ ಮಾಡಬಹುದು. ಇದನ್ನು ಮತದಾನ ಯಾಂತ್ರಿಕತೆಯಿಂದ ಜಾರಿಗೊಳಿಸಲಾಗುತ್ತದೆ, ಅಲ್ಲಿ ಅನುಯಾಯಿ ಪ್ರತಿ ಅವಧಿಗೆ ಗರಿಷ್ಠ ಒಂದು ಮತವನ್ನು ನೀಡುತ್ತಾನೆ ಮತ್ತು ಅಭ್ಯರ್ಥಿಗೆ ಬಹುಮತದ ಮತಗಳು ಬೇಕಾಗುತ್ತವೆ.
- ನಾಯಕನ ಸಂಪೂರ್ಣತೆ: ಒಂದು ಲಾಗ್ ನಮೂದು ನಿರ್ದಿಷ್ಟ ಅವಧಿಯಲ್ಲಿ ಕಮಿಟ್ ಆಗಿದ್ದರೆ, ಆ ನಮೂದು ಎಲ್ಲಾ ನಂತರದ ನಾಯಕರ ಲಾಗ್ಗಳಲ್ಲಿ ಇರುತ್ತದೆ. ಇದು ಕಮಿಟ್ ಆದ ಡೇಟಾದ ನಷ್ಟವನ್ನು ತಡೆಯಲು ನಿರ್ಣಾಯಕವಾಗಿದೆ ಮತ್ತು ಮುಖ್ಯವಾಗಿ ಚುನಾವಣಾ ನಿರ್ಬಂಧದಿಂದ ಖಚಿತಪಡಿಸಲ್ಪಡುತ್ತದೆ.
- ಲಾಗ್ ಹೊಂದಾಣಿಕೆ ಗುಣಲಕ್ಷಣ: ಎರಡು ಲಾಗ್ಗಳು ಒಂದೇ ಇಂಡೆಕ್ಸ್ ಮತ್ತು ಅವಧಿಯೊಂದಿಗೆ ನಮೂದನ್ನು ಹೊಂದಿದ್ದರೆ, ಆ ಲಾಗ್ಗಳು ಹಿಂದಿನ ಎಲ್ಲಾ ನಮೂದುಗಳಲ್ಲಿ ಒಂದೇ ಆಗಿರುತ್ತವೆ. ಇದು ಲಾಗ್ ಸ್ಥಿರತೆ ಪರಿಶೀಲನೆಗಳನ್ನು ಸರಳಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ನಾಯಕನಿಗೆ ಅನುಯಾಯಿಗಳ ಲಾಗ್ಗಳನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ನವೀಕರಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.
- ಕಮಿಟ್ ಸುರಕ್ಷತೆ: ಒಮ್ಮೆ ನಮೂದು ಕಮಿಟ್ ಆದ ನಂತರ, ಅದನ್ನು ಎಂದಿಗೂ ಹಿಂತೆಗೆದುಕೊಳ್ಳಲಾಗುವುದಿಲ್ಲ ಅಥವಾ ತಿದ್ದಿಬರೆಯಲಾಗುವುದಿಲ್ಲ. ಇದು ನಾಯಕನ ಸಂಪೂರ್ಣತೆ ಮತ್ತು ಲಾಗ್ ಹೊಂದಾಣಿಕೆ ಗುಣಲಕ್ಷಣಗಳ ನೇರ ಪರಿಣಾಮವಾಗಿದೆ. ಒಮ್ಮೆ ನಮೂದು ಕಮಿಟ್ ಆದ ನಂತರ, ಅದನ್ನು ಶಾಶ್ವತವಾಗಿ ಸಂಗ್ರಹಿಸಲಾಗಿದೆ ಎಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ.
ರಾಫ್ಟ್ನಲ್ಲಿನ ಪ್ರಮುಖ ಪರಿಕಲ್ಪನೆಗಳು ಮತ್ತು ಯಾಂತ್ರಿಕತೆಗಳು
ಪಾತ್ರಗಳು ಮತ್ತು ಕಾರ್ಯಾಚರಣೆಯ ಹಂತಗಳ ಆಚೆಗೆ, ರಾಫ್ಟ್ ಸ್ಥಿತಿಯನ್ನು ನಿರ್ವಹಿಸಲು ಮತ್ತು ಸರಿಯಾಗಿರುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಹಲವಾರು ಮೂಲ ಪರಿಕಲ್ಪನೆಗಳನ್ನು ಅವಲಂಬಿಸಿದೆ.
1. ಟರ್ಮ್ಗಳು (Terms)
ರಾಫ್ಟ್ನಲ್ಲಿನ term ನಿರಂತರವಾಗಿ ಹೆಚ್ಚುತ್ತಿರುವ ಪೂರ್ಣಾಂಕವಾಗಿದೆ. ಇದು ಕ್ಲಸ್ಟರ್ಗೆ ತಾರ್ಕಿಕ ಗಡಿಯಾರವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಪ್ರತಿಯೊಂದು ಅವಧಿಯು ಚುನಾವಣೆಯೊಂದಿಗೆ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ, ಮತ್ತು ಚುನಾವಣೆ ಯಶಸ್ವಿಯಾದರೆ, ಆ ಅವಧಿಗೆ ಒಬ್ಬ ನಾಯಕನನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗುತ್ತದೆ. ಹಳೆಯ ಮಾಹಿತಿಯನ್ನು ಗುರುತಿಸಲು ಮತ್ತು ಸರ್ವರ್ಗಳು ಯಾವಾಗಲೂ ಅತ್ಯಂತ ನವೀಕೃತ ಮಾಹಿತಿಗೆ ಮಣಿಯುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಟರ್ಮ್ಗಳು ನಿರ್ಣಾಯಕವಾಗಿವೆ:
-
ಸರ್ವರ್ಗಳು ತಮ್ಮ
current termಅನ್ನು ಎಲ್ಲಾ RPC ಗಳಲ್ಲಿ ವಿನಿಮಯ ಮಾಡಿಕೊಳ್ಳುತ್ತವೆ. -
ಒಂದು ಸರ್ವರ್ ಹೆಚ್ಚಿನ
termಹೊಂದಿರುವ ಇನ್ನೊಂದು ಸರ್ವರ್ ಅನ್ನು ಪತ್ತೆ ಮಾಡಿದರೆ, ಅದು ತನ್ನದೇcurrent termಅನ್ನು ನವೀಕರಿಸುತ್ತದೆ ಮತ್ತುfollowerಸ್ಥಿತಿಗೆ ಹಿಂತಿರುಗುತ್ತದೆ. -
ಒಬ್ಬ ಅಭ್ಯರ್ಥಿ ಅಥವಾ ನಾಯಕನು ತನ್ನ
termಹಳೆಯದಾಗಿದೆ ಎಂದು ಪತ್ತೆ ಮಾಡಿದರೆ (ಇನ್ನೊಂದು ಸರ್ವರ್ನtermಗಿಂತ ಕಡಿಮೆ), ಅದು ತಕ್ಷಣವೇ ಕೆಳಗಿಳಿಯುತ್ತದೆ.
2. ಲಾಗ್ ನಮೂದುಗಳು (Log Entries)
log ರಾಫ್ಟ್ನ ಕೇಂದ್ರ ಘಟಕವಾಗಿದೆ. ಇದು ನಮೂದುಗಳ ಕ್ರಮಬದ್ಧ ಅನುಕ್ರಮವಾಗಿದೆ, ಅಲ್ಲಿ ಪ್ರತಿಯೊಂದು log entry ಸ್ಟೇಟ್ ಮೆಷಿನ್ನಿಂದ ಕಾರ್ಯಗತಗೊಳಿಸಬೇಕಾದ ಆದೇಶವನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ. ಪ್ರತಿಯೊಂದು ನಮೂದು ಇವುಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ:
- ಕಮಾಂಡ್ (Command): ನಿರ್ವಹಿಸಬೇಕಾದ ನಿಜವಾದ ಕಾರ್ಯಾಚರಣೆ (ಉದಾ., "set x=5", "create user").
- ಟರ್ಮ್ (Term): ನಾಯಕನ ಮೇಲೆ ನಮೂದನ್ನು ರಚಿಸಿದ ಅವಧಿ.
- ಇಂಡೆಕ್ಸ್ (Index): ಲಾಗ್ನಲ್ಲಿ ನಮೂದಿನ ಸ್ಥಾನ. ಲಾಗ್ ನಮೂದುಗಳನ್ನು ಇಂಡೆಕ್ಸ್ನಿಂದ ಕಟ್ಟುನಿಟ್ಟಾಗಿ ಆದೇಶಿಸಲಾಗುತ್ತದೆ.
ಲಾಗ್ ಸ್ಥಿರವಾಗಿರುತ್ತದೆ, ಅಂದರೆ ನಮೂದುಗಳನ್ನು ಕ್ಲೈಂಟ್ಗಳಿಗೆ ಪ್ರತಿಕ್ರಿಯಿಸುವ ಮೊದಲು ಸ್ಥಿರ ಸಂಗ್ರಹಣೆಗೆ ಬರೆಯಲಾಗುತ್ತದೆ, ಕ್ರ್ಯಾಶ್ಗಳ ಸಮಯದಲ್ಲಿ ಡೇಟಾ ನಷ್ಟದಿಂದ ರಕ್ಷಿಸುತ್ತದೆ.
3. ಸ್ಟೇಟ್ ಮೆಷಿನ್ (State Machine)
ರಾಫ್ಟ್ ಕ್ಲಸ್ಟರ್ನಲ್ಲಿರುವ ಪ್ರತಿಯೊಂದು ಸರ್ವರ್ ಒಂದು state machine ಅನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ಇದು ಕಮಿಟ್ ಆದ ಲಾಗ್ ನಮೂದುಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವ ಅಪ್ಲಿಕೇಶನ್-ನಿರ್ದಿಷ್ಟ ಘಟಕವಾಗಿದೆ. ಸ್ಥಿರತೆಯನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು, ಸ್ಟೇಟ್ ಮೆಷಿನ್ ನಿರ್ಣಾಯಕ (deterministic) (ಒಂದೇ ಆರಂಭಿಕ ಸ್ಥಿತಿ ಮತ್ತು ಆದೇಶಗಳ ಅನುಕ್ರಮವನ್ನು ನೀಡಿದರೆ, ಅದು ಯಾವಾಗಲೂ ಒಂದೇ ಔಟ್ಪುಟ್ ಮತ್ತು ಅಂತಿಮ ಸ್ಥಿತಿಯನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ) ಮತ್ತು ಐಡೆಂಪೊಟೆಂಟ್ (idempotent) (ಒಂದೇ ಆದೇಶವನ್ನು ಹಲವು ಬಾರಿ ಅನ್ವಯಿಸುವುದು ಒಮ್ಮೆ ಅನ್ವಯಿಸಿದಂತೆಯೇ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ, ಇದು ಮರುಪ್ರಯತ್ನಗಳನ್ನು ಸರಾಗವಾಗಿ ನಿರ್ವಹಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಆದರೂ ರಾಫ್ಟ್ನ ಲಾಗ್ ಕಮಿಟ್ಮೆಂಟ್ ಹೆಚ್ಚಾಗಿ ಒಂದೇ ಅನ್ವಯವನ್ನು ಖಾತರಿಪಡಿಸುತ್ತದೆ) ಆಗಿರಬೇಕು.
4. ಕಮಿಟ್ ಇಂಡೆಕ್ಸ್ (Commit Index)
commitIndex ಕಮಿಟ್ ಆಗಿದೆ ಎಂದು ತಿಳಿದಿರುವ ಅತಿ ಹೆಚ್ಚಿನ ಲಾಗ್ ನಮೂದು ಇಂಡೆಕ್ಸ್ ಆಗಿದೆ. ಇದರರ್ಥ ಇದನ್ನು ಬಹುಪಾಲು ಸರ್ವರ್ಗಳಿಗೆ ಸುರಕ್ಷಿತವಾಗಿ ಪುನರಾವರ್ತಿಸಲಾಗಿದೆ ಮತ್ತು ಸ್ಟೇಟ್ ಮೆಷಿನ್ಗೆ ಅನ್ವಯಿಸಬಹುದು. ನಾಯಕರು commitIndex ಅನ್ನು ನಿರ್ಧರಿಸುತ್ತಾರೆ, ಮತ್ತು ಅನುಯಾಯಿಗಳು ನಾಯಕನ AppendEntries RPC ಗಳ ಆಧಾರದ ಮೇಲೆ ತಮ್ಮ commitIndex ಅನ್ನು ನವೀಕರಿಸುತ್ತಾರೆ. commitIndex ವರೆಗಿನ ಎಲ್ಲಾ ನಮೂದುಗಳನ್ನು ಶಾಶ್ವತವೆಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಹಿಂತೆಗೆದುಕೊಳ್ಳಲಾಗುವುದಿಲ್ಲ.
5. ಸ್ನ್ಯಾಪ್ಶಾಟ್ಗಳು (Snapshots)
ಕಾಲಾನಂತರದಲ್ಲಿ, ಪುನರಾವರ್ತಿತ ಲಾಗ್ ತುಂಬಾ ದೊಡ್ಡದಾಗಬಹುದು, ಗಮನಾರ್ಹ ಡಿಸ್ಕ್ ಸ್ಥಳವನ್ನು ಬಳಸಿಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಲಾಗ್ ಪುನರಾವರ್ತನೆ ಮತ್ತು ಚೇತರಿಕೆಯನ್ನು ನಿಧಾನಗೊಳಿಸುತ್ತದೆ. ರಾಫ್ಟ್ ಇದನ್ನು snapshots ಮೂಲಕ ಪರಿಹರಿಸುತ್ತದೆ. ಸ್ನ್ಯಾಪ್ಶಾಟ್ ಎನ್ನುವುದು ಒಂದು ನಿರ್ದಿಷ್ಟ ಸಮಯದಲ್ಲಿ ಸ್ಟೇಟ್ ಮೆಷಿನ್ನ ಸ್ಥಿತಿಯ ಸಾಂದ್ರವಾದ ಪ್ರಾತಿನಿಧ್ಯವಾಗಿದೆ. ಸಂಪೂರ್ಣ ಲಾಗ್ ಅನ್ನು ಇಟ್ಟುಕೊಳ್ಳುವ ಬದಲು, ಸರ್ವರ್ಗಳು ನಿಯತಕಾಲಿಕವಾಗಿ ತಮ್ಮ ಸ್ಥಿತಿಯನ್ನು "ಸ್ನ್ಯಾಪ್ಶಾಟ್" ಮಾಡಬಹುದು, ಸ್ನ್ಯಾಪ್ಶಾಟ್ ಪಾಯಿಂಟ್ವರೆಗಿನ ಎಲ್ಲಾ ಲಾಗ್ ನಮೂದುಗಳನ್ನು ತಿರಸ್ಕರಿಸಬಹುದು, ಮತ್ತು ನಂತರ ಸ್ನ್ಯಾಪ್ಶಾಟ್ ಅನ್ನು ಹೊಸ ಅಥವಾ ಹಿಂದುಳಿದ ಅನುಯಾಯಿಗಳಿಗೆ ಪುನರಾವರ್ತಿಸಬಹುದು. ಈ ಪ್ರಕ್ರಿಯೆಯು ದಕ್ಷತೆಯನ್ನು ಗಮನಾರ್ಹವಾಗಿ ಸುಧಾರಿಸುತ್ತದೆ:
- ಕಾಂಪ್ಯಾಕ್ಟ್ ಲಾಗ್: ಸ್ಥಿರ ಲಾಗ್ ಡೇಟಾದ ಪ್ರಮಾಣವನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.
- ವೇಗದ ಚೇತರಿಕೆ: ಹೊಸ ಅಥವಾ ಕ್ರ್ಯಾಶ್ ಆದ ಸರ್ವರ್ಗಳು ಮೊದಲಿನಿಂದ ಸಂಪೂರ್ಣ ಲಾಗ್ ಅನ್ನು ರಿಪ್ಲೇ ಮಾಡುವ ಬದಲು ಸ್ನ್ಯಾಪ್ಶಾಟ್ ಅನ್ನು ಸ್ವೀಕರಿಸಬಹುದು.
-
InstallSnapshot RPC: ರಾಫ್ಟ್ ಸ್ನ್ಯಾಪ್ಶಾಟ್ಗಳನ್ನು ನಾಯಕನಿಂದ ಅನುಯಾಯಿಗಳಿಗೆ ವರ್ಗಾಯಿಸಲು
InstallSnapshotRPC ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ.
ಪರಿಣಾಮಕಾರಿಯಾಗಿದ್ದರೂ, ಸ್ನ್ಯಾಪ್ಶಾಟಿಂಗ್ ಅನುಷ್ಠಾನಕ್ಕೆ ಸಂಕೀರ್ಣತೆಯನ್ನು ಸೇರಿಸುತ್ತದೆ, ವಿಶೇಷವಾಗಿ ಏಕಕಾಲೀನ ಸ್ನ್ಯಾಪ್ಶಾಟ್ ರಚನೆ, ಲಾಗ್ ಕಡಿತ ಮತ್ತು ಪ್ರಸರಣವನ್ನು ನಿರ್ವಹಿಸುವಲ್ಲಿ.
ರಾಫ್ಟ್ ಅನ್ನು ಅನುಷ್ಠಾನಗೊಳಿಸುವುದು: ಜಾಗತಿಕ ನಿಯೋಜನೆಗಾಗಿ ಪ್ರಾಯೋಗಿಕ ಪರಿಗಣನೆಗಳು
ರಾಫ್ಟ್ನ ಸೊಗಸಾದ ವಿನ್ಯಾಸವನ್ನು ದೃಢವಾದ, ಉತ್ಪಾದನೆಗೆ ಸಿದ್ಧವಾದ ವ್ಯವಸ್ಥೆಯಾಗಿ, ವಿಶೇಷವಾಗಿ ಜಾಗತಿಕ ಪ್ರೇಕ್ಷಕರು ಮತ್ತು ವೈವಿಧ್ಯಮಯ ಮೂಲಸೌಕರ್ಯಕ್ಕಾಗಿ, ಭಾಷಾಂತರಿಸುವುದು ಹಲವಾರು ಪ್ರಾಯೋಗಿಕ ಇಂಜಿನಿಯರಿಂಗ್ ಸವಾಲುಗಳನ್ನು ಪರಿಹರಿಸುವುದನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ.
1. ಜಾಗತಿಕ ಸಂದರ್ಭದಲ್ಲಿ ನೆಟ್ವರ್ಕ್ ಲೇಟೆನ್ಸಿ ಮತ್ತು ವಿಭಜನೆಗಳು
ಜಾಗತಿಕವಾಗಿ ವಿತರಿಸಿದ ಸಿಸ್ಟಮ್ಗಳಿಗೆ, ನೆಟ್ವರ್ಕ್ ಲೇಟೆನ್ಸಿ ಒಂದು ಮಹತ್ವದ ಅಂಶವಾಗಿದೆ. ರಾಫ್ಟ್ ಕ್ಲಸ್ಟರ್ ಸಾಮಾನ್ಯವಾಗಿ ಲಾಗ್ ನಮೂದನ್ನು ಕಮಿಟ್ ಮಾಡುವ ಮೊದಲು ಬಹುಪಾಲು ನೋಡ್ಗಳು ಒಪ್ಪಿಕೊಳ್ಳಬೇಕಾಗುತ್ತದೆ. ಖಂಡಗಳಾದ್ಯಂತ ಹರಡಿರುವ ಕ್ಲಸ್ಟರ್ನಲ್ಲಿ, ನೋಡ್ಗಳ ನಡುವಿನ ಲೇಟೆನ್ಸಿ ನೂರಾರು ಮಿಲಿಸೆಕೆಂಡ್ಗಳಾಗಿರಬಹುದು. ಇದು ನೇರವಾಗಿ ಈ ಕೆಳಗಿನವುಗಳ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ:
- ಕಮಿಟ್ ಲೇಟೆನ್ಸಿ: ಕ್ಲೈಂಟ್ ವಿನಂತಿಯು ಕಮಿಟ್ ಆಗಲು ತೆಗೆದುಕೊಳ್ಳುವ ಸಮಯವು ಬಹುಪಾಲು ಪ್ರತಿಗಳಿಗೆ ಇರುವ ಅತಿ ನಿಧಾನವಾದ ನೆಟ್ವರ್ಕ್ ಲಿಂಕ್ನಿಂದ ಅಡಚಣೆಯಾಗಬಹುದು. ಓದಲು-ಮಾತ್ರ ಅನುಯಾಯಿಗಳು (ಹಳೆಯ ಓದುವಿಕೆಗಳಿಗೆ ನಾಯಕನ ಸಂವಹನದ ಅಗತ್ಯವಿಲ್ಲ) ಅಥವಾ ಭೌಗೋಳಿಕವಾಗಿ-ಅರಿವಿನ ಕೋರಂ ಕಾನ್ಫಿಗರೇಶನ್ (ಉದಾ., ಒಂದು ಪ್ರದೇಶದಲ್ಲಿ 3 ನೋಡ್ಗಳು, ಇನ್ನೊಂದರಲ್ಲಿ 2, 5-ನೋಡ್ ಕ್ಲಸ್ಟರ್ಗಾಗಿ, ಅಲ್ಲಿ ಬಹುಮತವು ಒಂದೇ ವೇಗದ ಪ್ರದೇಶದಲ್ಲಿರಬಹುದು) ನಂತಹ ತಂತ್ರಗಳು ಇದನ್ನು ತಗ್ಗಿಸಬಹುದು.
-
ನಾಯಕನ ಚುನಾವಣೆಯ ವೇಗ: ಹೆಚ್ಚಿನ ಲೇಟೆನ್ಸಿಯು
RequestVoteRPC ಗಳನ್ನು ವಿಳಂಬಗೊಳಿಸಬಹುದು, ಸಂಭಾವ್ಯವಾಗಿ ಹೆಚ್ಚು ಆಗಾಗ್ಗೆ ವಿಭಜಿತ ಮತಗಳಿಗೆ ಅಥವಾ ದೀರ್ಘ ಚುನಾವಣಾ ಸಮಯಕ್ಕೆ ಕಾರಣವಾಗಬಹುದು. ಚುನಾವಣಾ ಕಾಲಾವಧಿಗಳನ್ನು ವಿಶಿಷ್ಟವಾದ ಅಂತರ-ನೋಡ್ ಲೇಟೆನ್ಸಿಗಿಂತ ಗಮನಾರ್ಹವಾಗಿ ದೊಡ್ಡದಾಗಿ ಹೊಂದಿಸುವುದು ನಿರ್ಣಾಯಕವಾಗಿದೆ. - ನೆಟ್ವರ್ಕ್ ವಿಭಜನೆ ನಿರ್ವಹಣೆ: ನೈಜ-ಪ್ರಪಂಚದ ನೆಟ್ವರ್ಕ್ಗಳು ವಿಭಜನೆಗಳಿಗೆ ಗುರಿಯಾಗುತ್ತವೆ. ರಾಫ್ಟ್ ವಿಭಜನೆಗಳನ್ನು ಸರಿಯಾಗಿ ನಿರ್ವಹಿಸುತ್ತದೆ, ಬಹುಪಾಲು ಸರ್ವರ್ಗಳನ್ನು ಹೊಂದಿರುವ ವಿಭಜನೆಯು ಮಾತ್ರ ನಾಯಕನನ್ನು ಆಯ್ಕೆ ಮಾಡಬಹುದು ಮತ್ತು ಪ್ರಗತಿ ಸಾಧಿಸಬಹುದು ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ. ಅಲ್ಪಸಂಖ್ಯಾತ ವಿಭಜನೆಯು ಹೊಸ ನಮೂದುಗಳನ್ನು ಕಮಿಟ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ, ಹೀಗಾಗಿ ಸ್ಪ್ಲಿಟ್-ಬ್ರೈನ್ ಸನ್ನಿವೇಶಗಳನ್ನು ತಡೆಯುತ್ತದೆ. ಆದಾಗ್ಯೂ, ಜಾಗತಿಕವಾಗಿ ವಿತರಿಸಿದ ಸೆಟಪ್ನಲ್ಲಿ ದೀರ್ಘಕಾಲದ ವಿಭಜನೆಗಳು ಕೆಲವು ಪ್ರದೇಶಗಳಲ್ಲಿ ಲಭ್ಯತೆಯ ಕೊರತೆಗೆ ಕಾರಣವಾಗಬಹುದು, ಕೋರಂ ನಿಯೋಜನೆಯ ಬಗ್ಗೆ ಎಚ್ಚರಿಕೆಯ ವಾಸ್ತುಶಿಲ್ಪದ ನಿರ್ಧಾರಗಳನ್ನು ಅಗತ್ಯಪಡಿಸುತ್ತದೆ.
2. ಸ್ಥಿರ ಸಂಗ್ರಹಣೆ ಮತ್ತು ಬಾಳಿಕೆ
ರಾಫ್ಟ್ನ ಸರಿಯಾದ ಕಾರ್ಯನಿರ್ವಹಣೆಯು ಅದರ ಲಾಗ್ ಮತ್ತು ಸ್ಥಿತಿಯ ಸ್ಥಿರತೆಯ ಮೇಲೆ ಹೆಚ್ಚು ಅವಲಂಬಿತವಾಗಿದೆ. ಸರ್ವರ್ ಒಂದು RPCಗೆ ಪ್ರತಿಕ್ರಿಯಿಸುವ ಮೊದಲು ಅಥವಾ ಅದರ ಸ್ಟೇಟ್ ಮೆಷಿನ್ಗೆ ನಮೂದನ್ನು ಅನ್ವಯಿಸುವ ಮೊದಲು, ಸಂಬಂಧಿತ ಡೇಟಾ (ಲಾಗ್ ನಮೂದುಗಳು, current term, votedFor) ಸ್ಥಿರ ಸಂಗ್ರಹಣೆಗೆ ಬರೆಯಲ್ಪಟ್ಟಿದೆ ಮತ್ತು fsync'd (ಡಿಸ್ಕ್ಗೆ ಫ್ಲಶ್ ಮಾಡಲಾಗಿದೆ) ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬೇಕು. ಇದು ಕ್ರ್ಯಾಶ್ ಸಂದರ್ಭದಲ್ಲಿ ಡೇಟಾ ನಷ್ಟವನ್ನು ತಡೆಯುತ್ತದೆ. ಪರಿಗಣನೆಗಳು ಸೇರಿವೆ:
- ಕಾರ್ಯಕ್ಷಮತೆ: ಆಗಾಗ್ಗೆ ಡಿಸ್ಕ್ ಬರವಣಿಗೆಗಳು ಕಾರ್ಯಕ್ಷಮತೆಯ ಅಡಚಣೆಯಾಗಬಹುದು. ಬರವಣಿಗೆಗಳನ್ನು ಬ್ಯಾಚ್ ಮಾಡುವುದು ಮತ್ತು ಹೆಚ್ಚಿನ ಕಾರ್ಯಕ್ಷಮತೆಯ SSD ಗಳನ್ನು ಬಳಸುವುದು ಸಾಮಾನ್ಯ ಆಪ್ಟಿಮೈಸೇಶನ್ಗಳಾಗಿವೆ.
- ವಿಶ್ವಾಸಾರ್ಹತೆ: ದೃಢವಾದ ಮತ್ತು ಬಾಳಿಕೆ ಬರುವ ಶೇಖರಣಾ ಪರಿಹಾರವನ್ನು (ಸ್ಥಳೀಯ ಡಿಸ್ಕ್, ನೆಟ್ವರ್ಕ್-ಲಗತ್ತಿಸಲಾದ ಶೇಖರಣೆ, ಕ್ಲೌಡ್ ಬ್ಲಾಕ್ ಸ್ಟೋರೇಜ್) ಆಯ್ಕೆ ಮಾಡುವುದು ನಿರ್ಣಾಯಕವಾಗಿದೆ.
- WAL (Write-Ahead Log): ಆಗಾಗ್ಗೆ, ರಾಫ್ಟ್ ಅನುಷ್ಠಾನಗಳು ಡೇಟಾಬೇಸ್ಗಳಂತೆಯೇ, ಬಾಳಿಕೆಗಾಗಿ ರೈಟ್-ಅಹೆಡ್ ಲಾಗ್ ಅನ್ನು ಬಳಸುತ್ತವೆ, ಬದಲಾವಣೆಗಳನ್ನು ಮೆಮೊರಿಯಲ್ಲಿ ಅನ್ವಯಿಸುವ ಮೊದಲು ಡಿಸ್ಕ್ಗೆ ಬರೆಯಲಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು.
3. ಕ್ಲೈಂಟ್ ಸಂವಹನ ಮತ್ತು ಸ್ಥಿರತೆ ಮಾದರಿಗಳು
ಕ್ಲೈಂಟ್ಗಳು ನಾಯಕನಿಗೆ ವಿನಂತಿಗಳನ್ನು ಕಳುಹಿಸುವ ಮೂಲಕ ರಾಫ್ಟ್ ಕ್ಲಸ್ಟರ್ನೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸುತ್ತಾರೆ. ಕ್ಲೈಂಟ್ ವಿನಂತಿಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು ಇವುಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ:
- ನಾಯಕನ ಅನ್ವೇಷಣೆ: ಕ್ಲೈಂಟ್ಗಳಿಗೆ ಪ್ರಸ್ತುತ ನಾಯಕನನ್ನು ಹುಡುಕಲು ಒಂದು ಯಾಂತ್ರಿಕತೆಯ ಅಗತ್ಯವಿದೆ. ಇದು ಸೇವಾ ಅನ್ವೇಷಣೆ ಯಾಂತ್ರಿಕತೆ, ಮರುನಿರ್ದೇಶಿಸುವ ಸ್ಥಿರ ಎಂಡ್ಪಾಯಿಂಟ್, ಅಥವಾ ಒಬ್ಬರು ನಾಯಕನಾಗಿ ಪ್ರತಿಕ್ರಿಯಿಸುವವರೆಗೆ ಸರ್ವರ್ಗಳನ್ನು ಪ್ರಯತ್ನಿಸುವ ಮೂಲಕ ಆಗಿರಬಹುದು.
- ವಿನಂತಿ ಮರುಪ್ರಯತ್ನಗಳು: ನಾಯಕ ಬದಲಾದರೆ ಅಥವಾ ನೆಟ್ವರ್ಕ್ ದೋಷ ಸಂಭವಿಸಿದರೆ ಕ್ಲೈಂಟ್ಗಳು ವಿನಂತಿಗಳನ್ನು ಮರುಪ್ರಯತ್ನಿಸಲು ಸಿದ್ಧರಿರಬೇಕು.
-
ಓದುವ ಸ್ಥಿರತೆ: ರಾಫ್ಟ್ ಪ್ರಾಥಮಿಕವಾಗಿ ಬರವಣಿಗೆಗಳಿಗಾಗಿ ಬಲವಾದ ಸ್ಥಿರತೆಯನ್ನು ಖಾತರಿಪಡಿಸುತ್ತದೆ. ಓದುವಿಕೆಗಳಿಗಾಗಿ, ಹಲವಾರು ಮಾದರಿಗಳು ಸಾಧ್ಯ:
- ಬಲವಾಗಿ ಸ್ಥಿರವಾದ ಓದುವಿಕೆಗಳು: ಕ್ಲೈಂಟ್ ತನ್ನ ಸ್ಥಿತಿಯು ನವೀಕೃತವಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ನಾಯಕನನ್ನು ಕೇಳಬಹುದು, ಓದುವಿಕೆಯನ್ನು ಪೂರೈಸುವ ಮೊದಲು ತನ್ನ ಬಹುಪಾಲು ಅನುಯಾಯಿಗಳಿಗೆ ಹಾರ್ಟ್ಬೀಟ್ ಕಳುಹಿಸುವ ಮೂಲಕ. ಇದು ತಾಜಾತನವನ್ನು ಖಾತರಿಪಡಿಸುತ್ತದೆ ಆದರೆ ಲೇಟೆನ್ಸಿಯನ್ನು ಸೇರಿಸುತ್ತದೆ.
- ನಾಯಕ-ಲೀಸ್ ಓದುವಿಕೆಗಳು: ನಾಯಕನು ಅಲ್ಪಾವಧಿಗೆ ಬಹುಪಾಲು ನೋಡ್ಗಳಿಂದ 'ಲೀಸ್' ಅನ್ನು ಪಡೆದುಕೊಳ್ಳಬಹುದು, ಆ ಸಮಯದಲ್ಲಿ ತಾನು ಇನ್ನೂ ನಾಯಕನೆಂದು ತಿಳಿದಿರುತ್ತಾನೆ ಮತ್ತು ಹೆಚ್ಚಿನ ಸಹಮತವಿಲ್ಲದೆ ಓದುವಿಕೆಗಳನ್ನು ಪೂರೈಸಬಹುದು. ಇದು ವೇಗವಾಗಿರುತ್ತದೆ ಆದರೆ ಸಮಯ-ಬದ್ಧವಾಗಿರುತ್ತದೆ.
- ಹಳೆಯ ಓದುವಿಕೆಗಳು (ಅನುಯಾಯಿಗಳಿಂದ): ಅನುಯಾಯಿಗಳಿಂದ ನೇರವಾಗಿ ಓದುವುದು ಕಡಿಮೆ ಲೇಟೆನ್ಸಿಯನ್ನು ನೀಡಬಹುದು ಆದರೆ ಅನುಯಾಯಿಯ ಲಾಗ್ ನಾಯಕನಿಗಿಂತ ಹಿಂದುಳಿದಿದ್ದರೆ ಹಳೆಯ ಡೇಟಾವನ್ನು ಓದುವ ಅಪಾಯವಿದೆ. ಓದುವಿಕೆಗಳಿಗೆ ಅಂತಿಮ ಸ್ಥಿರತೆ ಸಾಕಾಗುವ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಇದು ಸ್ವೀಕಾರಾರ್ಹ.
4. ಕಾನ್ಫಿಗರೇಶನ್ ಬದಲಾವಣೆಗಳು (ಕ್ಲಸ್ಟರ್ ಸದಸ್ಯತ್ವ)
ರಾಫ್ಟ್ ಕ್ಲಸ್ಟರ್ನ ಸದಸ್ಯತ್ವವನ್ನು ಬದಲಾಯಿಸುವುದು (ಸರ್ವರ್ಗಳನ್ನು ಸೇರಿಸುವುದು ಅಥವಾ ತೆಗೆದುಹಾಕುವುದು) ಒಂದು ಸಂಕೀರ್ಣ ಕಾರ್ಯಾಚರಣೆಯಾಗಿದ್ದು, ಅಸಂಗತತೆಗಳು ಅಥವಾ ಸ್ಪ್ಲಿಟ್-ಬ್ರೈನ್ ಸನ್ನಿವೇಶಗಳನ್ನು ತಪ್ಪಿಸಲು ಸಹಮತದ ಮೂಲಕವೇ ನಿರ್ವಹಿಸಬೇಕು. ರಾಫ್ಟ್ ಜಂಟಿ ಸಹಮತ (Joint Consensus) ಎಂಬ ತಂತ್ರವನ್ನು ಪ್ರಸ್ತಾಪಿಸುತ್ತದೆ:
- ಎರಡು ಕಾನ್ಫಿಗರೇಶನ್ಗಳು: ಕಾನ್ಫಿಗರೇಶನ್ ಬದಲಾವಣೆಯ ಸಮಯದಲ್ಲಿ, ಸಿಸ್ಟಮ್ ತಾತ್ಕಾಲಿಕವಾಗಿ ಎರಡು ಅತಿಕ್ರಮಿಸುವ ಕಾನ್ಫಿಗರೇಶನ್ಗಳೊಂದಿಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ: ಹಳೆಯ ಕಾನ್ಫಿಗರೇಶನ್ (C_old) ಮತ್ತು ಹೊಸ ಕಾನ್ಫಿಗರೇಶನ್ (C_new).
- ಜಂಟಿ ಸಹಮತ ಸ್ಥಿತಿ (C_old, C_new): ನಾಯಕನು ಜಂಟಿ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಪ್ರತಿನಿಧಿಸುವ ವಿಶೇಷ ಲಾಗ್ ನಮೂದನ್ನು ಪ್ರಸ್ತಾಪಿಸುತ್ತಾನೆ. ಒಮ್ಮೆ ಈ ನಮೂದು ಕಮಿಟ್ ಆದ ನಂತರ (C_old ಮತ್ತು C_new ಎರಡರಲ್ಲೂ ಬಹುಮತದ ಒಪ್ಪಿಗೆ ಅಗತ್ಯ), ಸಿಸ್ಟಮ್ ಪರಿವರ್ತನೆಯ ಸ್ಥಿತಿಯಲ್ಲಿರುತ್ತದೆ. ಈಗ, ನಿರ್ಧಾರಗಳಿಗೆ ಎರಡೂ ಕಾನ್ಫಿಗರೇಶನ್ಗಳಿಂದ ಬಹುಮತದ ಅಗತ್ಯವಿದೆ. ಇದು ಪರಿವರ್ತನೆಯ ಸಮಯದಲ್ಲಿ ಹಳೆಯ ಅಥವಾ ಹೊಸ ಕಾನ್ಫಿಗರೇಶನ್ ಏಕಪಕ್ಷೀಯವಾಗಿ ನಿರ್ಧಾರಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ, ಭಿನ್ನಾಭಿಪ್ರಾಯವನ್ನು ತಡೆಯುತ್ತದೆ.
- C_new ಗೆ ಪರಿವರ್ತನೆ: ಒಮ್ಮೆ ಜಂಟಿ ಕಾನ್ಫಿಗರೇಶನ್ ಲಾಗ್ ನಮೂದು ಕಮಿಟ್ ಆದ ನಂತರ, ನಾಯಕನು ಕೇವಲ ಹೊಸ ಕಾನ್ಫಿಗರೇಶನ್ (C_new) ಅನ್ನು ಪ್ರತಿನಿಧಿಸುವ ಮತ್ತೊಂದು ಲಾಗ್ ನಮೂದನ್ನು ಪ್ರಸ್ತಾಪಿಸುತ್ತಾನೆ. ಒಮ್ಮೆ ಈ ಎರಡನೇ ನಮೂದು ಕಮಿಟ್ ಆದ ನಂತರ, ಹಳೆಯ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ತಿರಸ್ಕರಿಸಲಾಗುತ್ತದೆ, ಮತ್ತು ಸಿಸ್ಟಮ್ ಕೇವಲ C_new ಅಡಿಯಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.
- ಸುರಕ್ಷತೆ: ಈ ಎರಡು-ಹಂತದ ಕಮಿಟ್-ರೀತಿಯ ಪ್ರಕ್ರಿಯೆಯು ಯಾವುದೇ ಹಂತದಲ್ಲಿ ಎರಡು ಸಂಘರ್ಷದ ನಾಯಕರನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗುವುದಿಲ್ಲ (ಒಬ್ಬರು C_old ಅಡಿಯಲ್ಲಿ, ಇನ್ನೊಬ್ಬರು C_new ಅಡಿಯಲ್ಲಿ) ಮತ್ತು ಬದಲಾವಣೆಯ ಉದ್ದಕ್ಕೂ ಸಿಸ್ಟಮ್ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.
ಪರಿವರ್ತನಾ ಸ್ಥಿತಿಯ ಸಮಯದಲ್ಲಿನ ಹಲವಾರು ಎಡ್ಜ್ ಕೇಸ್ಗಳು ಮತ್ತು ವೈಫಲ್ಯದ ಸನ್ನಿವೇಶಗಳಿಂದಾಗಿ ಕಾನ್ಫಿಗರೇಶನ್ ಬದಲಾವಣೆಗಳನ್ನು ಸರಿಯಾಗಿ ಅನುಷ್ಠಾನಗೊಳಿಸುವುದು ರಾಫ್ಟ್ ಅನುಷ್ಠಾನದ ಅತ್ಯಂತ ಸವಾಲಿನ ಭಾಗಗಳಲ್ಲಿ ಒಂದಾಗಿದೆ.
5. ವಿತರಿಸಿದ ಸಿಸ್ಟಮ್ಗಳನ್ನು ಪರೀಕ್ಷಿಸುವುದು: ಕಠಿಣ ವಿಧಾನ
ರಾಫ್ಟ್ನಂತಹ ವಿತರಿಸಿದ ಸಹಮತ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಪರೀಕ್ಷಿಸುವುದು ಅದರ ನಿರ್ಣಾಯಕವಲ್ಲದ ಸ್ವಭಾವ ಮತ್ತು ವೈಫಲ್ಯದ ವಿಧಾನಗಳ ಬಹುಸಂಖ್ಯೆಯಿಂದಾಗಿ ಅಸಾಧಾರಣವಾಗಿ ಸವಾಲಿನದ್ದಾಗಿದೆ. ಸರಳ ಯೂನಿಟ್ ಪರೀಕ್ಷೆಗಳು ಸಾಕಾಗುವುದಿಲ್ಲ. ಕಠಿಣ ಪರೀಕ್ಷೆಯು ಇವುಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ:
- ದೋಷ ಇಂಜೆಕ್ಷನ್: ನೋಡ್ ಕ್ರ್ಯಾಶ್ಗಳು, ನೆಟ್ವರ್ಕ್ ವಿಭಜನೆಗಳು, ಸಂದೇಶ ವಿಳಂಬಗಳು, ಮತ್ತು ಸಂದೇಶ ಮರುಕ್ರಮಗೊಳಿಸುವಿಕೆಯಂತಹ ವೈಫಲ್ಯಗಳನ್ನು ವ್ಯವಸ್ಥಿತವಾಗಿ ಪರಿಚಯಿಸುವುದು. ಜೆಪ್ಸೆನ್ (Jepsen) ನಂತಹ ಉಪಕರಣಗಳನ್ನು ಈ ಉದ್ದೇಶಕ್ಕಾಗಿ ವಿಶೇಷವಾಗಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ.
- ಪ್ರಾಪರ್ಟಿ-ಆಧಾರಿತ ಪರೀಕ್ಷೆ: ಅಸ್ಥಿರಗಳು ಮತ್ತು ಸುರಕ್ಷತಾ ಗುಣಲಕ್ಷಣಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುವುದು (ಉದಾ., ಪ್ರತಿ ಅವಧಿಗೆ ಗರಿಷ್ಠ ಒಬ್ಬ ನಾಯಕ, ಕಮಿಟ್ ಆದ ನಮೂದುಗಳು ಎಂದಿಗೂ ಕಳೆದುಹೋಗುವುದಿಲ್ಲ) ಮತ್ತು ಅನುಷ್ಠಾನವು ಇವುಗಳನ್ನು ವಿವಿಧ ಪರಿಸ್ಥಿತಿಗಳಲ್ಲಿ ಎತ್ತಿಹಿಡಿಯುತ್ತದೆ ಎಂದು ಪರೀಕ್ಷಿಸುವುದು.
- ಮಾದರಿ ಪರಿಶೀಲನೆ: ಅಲ್ಗಾರಿದಮ್ನ ನಿರ್ಣಾಯಕ ಭಾಗಗಳಿಗೆ, ಔಪಚಾರಿಕ ಪರಿಶೀಲನಾ ತಂತ್ರಗಳನ್ನು ಸರಿಯಾಗಿರುವುದನ್ನು ಸಾಬೀತುಪಡಿಸಲು ಬಳಸಬಹುದು, ಆದರೂ ಇದು ಹೆಚ್ಚು ವಿಶೇಷವಾಗಿದೆ.
- ಸಿಮ್ಯುಲೇಟೆಡ್ ಪರಿಸರಗಳು: ಜಾಗತಿಕ ನಿಯೋಜನೆಗಳಿಗೆ ವಿಶಿಷ್ಟವಾದ ನೆಟ್ವರ್ಕ್ ಪರಿಸ್ಥಿತಿಗಳನ್ನು (ಲೇಟೆನ್ಸಿ, ಪ್ಯಾಕೆಟ್ ನಷ್ಟ) ಅನುಕರಿಸುವ ಪರಿಸರಗಳಲ್ಲಿ ಪರೀಕ್ಷೆಗಳನ್ನು ನಡೆಸುವುದು.
ಬಳಕೆಯ ಪ್ರಕರಣಗಳು ಮತ್ತು ನೈಜ-ಪ್ರಪಂಚದ ಅನ್ವಯಗಳು
ರಾಫ್ಟ್ನ ಪ್ರಾಯೋಗಿಕತೆ ಮತ್ತು ಸುಲಭವಾಗಿ ಅರ್ಥವಾಗುವಿಕೆಯು ವಿವಿಧ ನಿರ್ಣಾಯಕ ಮೂಲಸೌಕರ್ಯ ಘಟಕಗಳಲ್ಲಿ ಅದರ ವ್ಯಾಪಕ ಅಳವಡಿಕೆಗೆ ಕಾರಣವಾಗಿದೆ:
1. ವಿತರಿಸಿದ ಕೀ-ವ್ಯಾಲ್ಯೂ ಸ್ಟೋರ್ಗಳು ಮತ್ತು ಡೇಟಾಬೇಸ್ ಪುನರಾವರ್ತನೆ
- etcd: ಕುಬರ್ನೆಟಿಸ್ನ ಒಂದು ಮೂಲಭೂತ ಘಟಕವಾದ etcd, ಕಾನ್ಫಿಗರೇಶನ್ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸಲು ಮತ್ತು ಪುನರಾವರ್ತಿಸಲು, ಸೇವಾ ಅನ್ವೇಷಣೆ ಮಾಹಿತಿಯನ್ನು, ಮತ್ತು ಕ್ಲಸ್ಟರ್ನ ಸ್ಥಿತಿಯನ್ನು ನಿರ್ವಹಿಸಲು ರಾಫ್ಟ್ ಅನ್ನು ಬಳಸುತ್ತದೆ. ಕುಬರ್ನೆಟಿಸ್ ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಅದರ ವಿಶ್ವಾಸಾರ್ಹತೆ ಅತ್ಯಂತ ಮುಖ್ಯವಾಗಿದೆ.
- Consul: ಹ್ಯಾಶಿಕಾರ್ಪ್ನಿಂದ ಅಭಿವೃದ್ಧಿಪಡಿಸಲ್ಪಟ್ಟ ಕಾನ್ಸುಲ್, ತನ್ನ ವಿತರಿಸಿದ ಶೇಖರಣಾ ಬ್ಯಾಕೆಂಡ್ಗಾಗಿ ರಾಫ್ಟ್ ಅನ್ನು ಬಳಸುತ್ತದೆ, ಡೈನಾಮಿಕ್ ಮೂಲಸೌಕರ್ಯ ಪರಿಸರಗಳಲ್ಲಿ ಸೇವಾ ಅನ್ವೇಷಣೆ, ಆರೋಗ್ಯ ತಪಾಸಣೆ, ಮತ್ತು ಕಾನ್ಫಿಗರೇಶನ್ ನಿರ್ವಹಣೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.
- TiKV: TiDB (ವಿತರಿಸಿದ SQL ಡೇಟಾಬೇಸ್) ಬಳಸುವ ವಿತರಿಸಿದ ವಹಿವಾಟು ಕೀ-ವ್ಯಾಲ್ಯೂ ಸ್ಟೋರ್, ತನ್ನ ಡೇಟಾ ಪುನರಾವರ್ತನೆ ಮತ್ತು ಸ್ಥಿರತೆ ಖಾತರಿಗಳಿಗಾಗಿ ರಾಫ್ಟ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ.
- CockroachDB: ಈ ಜಾಗತಿಕವಾಗಿ ವಿತರಿಸಿದ SQL ಡೇಟಾಬೇಸ್, ಅನೇಕ ನೋಡ್ಗಳು ಮತ್ತು ಭೌಗೋಳಿಕ ಪ್ರದೇಶಗಳಲ್ಲಿ ಡೇಟಾವನ್ನು ಪುನರಾವರ್ತಿಸಲು, ಹೆಚ್ಚಿನ ಲಭ್ಯತೆ ಮತ್ತು ಬಲವಾದ ಸ್ಥಿರತೆಯನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು, ಪ್ರದೇಶ-ವ್ಯಾಪಿ ವೈಫಲ್ಯಗಳ ಸಂದರ್ಭದಲ್ಲಿಯೂ ರಾಫ್ಟ್ ಅನ್ನು ವ್ಯಾಪಕವಾಗಿ ಬಳಸುತ್ತದೆ.
2. ಸೇವಾ ಅನ್ವೇಷಣೆ ಮತ್ತು ಕಾನ್ಫಿಗರೇಶನ್ ನಿರ್ವಹಣೆ
ಸೇವೆಗಳು ಮತ್ತು ಕಾನ್ಫಿಗರೇಶನ್ಗಳ ಬಗ್ಗೆ ನಿರ್ಣಾಯಕ ಮೆಟಾಡೇಟಾವನ್ನು ಕ್ಲಸ್ಟರ್ನಾದ್ಯಂತ ಸಂಗ್ರಹಿಸಲು ಮತ್ತು ವಿತರಿಸಲು ಅಗತ್ಯವಿರುವ ಸಿಸ್ಟಮ್ಗಳಿಗೆ ರಾಫ್ಟ್ ಒಂದು ಆದರ್ಶ ಅಡಿಪಾಯವನ್ನು ಒದಗಿಸುತ್ತದೆ. ಒಂದು ಸೇವೆ ನೋಂದಾಯಿಸಿದಾಗ ಅಥವಾ ಅದರ ಕಾನ್ಫಿಗರೇಶನ್ ಬದಲಾದಾಗ, ಎಲ್ಲಾ ನೋಡ್ಗಳು ಅಂತಿಮವಾಗಿ ಹೊಸ ಸ್ಥಿತಿಯ ಬಗ್ಗೆ ಒಪ್ಪಿಕೊಳ್ಳುತ್ತವೆ ಎಂದು ರಾಫ್ಟ್ ಖಚಿತಪಡಿಸುತ್ತದೆ, ಹಸ್ತಚಾಲಿತ ಹಸ್ತಕ್ಷೇಪವಿಲ್ಲದೆ ಡೈನಾಮಿಕ್ ನವೀಕರಣಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.
3. ವಿತರಿಸಿದ ವಹಿವಾಟು ಸಂಯೋಜಕರು
ಅನೇಕ ಕಾರ್ಯಾಚರಣೆಗಳು ಅಥವಾ ಸೇವೆಗಳಲ್ಲಿ ಪರಮಾಣುತ್ವದ ಅಗತ್ಯವಿರುವ ಸಿಸ್ಟಮ್ಗಳಿಗೆ, ರಾಫ್ಟ್ ವಿತರಿಸಿದ ವಹಿವಾಟು ಸಂಯೋಜಕರಿಗೆ ಆಧಾರವಾಗಬಹುದು, ಭಾಗವಹಿಸುವವರಲ್ಲಿ ಬದಲಾವಣೆಗಳನ್ನು ಕಮಿಟ್ ಮಾಡುವ ಮೊದಲು ವಹಿವಾಟು ಲಾಗ್ಗಳು ಸ್ಥಿರವಾಗಿ ಪುನರಾವರ್ತನೆಯಾಗುತ್ತವೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.
4. ಇತರ ಸಿಸ್ಟಮ್ಗಳಲ್ಲಿ ಕ್ಲಸ್ಟರ್ ಸಮನ್ವಯ ಮತ್ತು ನಾಯಕನ ಚುನಾವಣೆ
ಸ್ಪಷ್ಟ ಡೇಟಾಬೇಸ್ ಅಥವಾ ಕೀ-ವ್ಯಾಲ್ಯೂ ಸ್ಟೋರ್ ಬಳಕೆಯ ಆಚೆಗೆ, ರಾಫ್ಟ್ ಅನ್ನು ಆಗಾಗ್ಗೆ ಸಮನ್ವಯ ಕಾರ್ಯಗಳನ್ನು ನಿರ್ವಹಿಸಲು, ಇತರ ವಿತರಿಸಿದ ಪ್ರಕ್ರಿಯೆಗಳಿಗೆ ನಾಯಕರನ್ನು ಆಯ್ಕೆ ಮಾಡಲು, ಅಥವಾ ದೊಡ್ಡ ಸಿಸ್ಟಮ್ಗಳಲ್ಲಿ ವಿಶ್ವಾಸಾರ್ಹ ನಿಯಂತ್ರಣ ಪ್ಲೇನ್ ಒದಗಿಸಲು ಲೈಬ್ರರಿ ಅಥವಾ ಕೋರ್ ಘಟಕವಾಗಿ ಎಂಬೆಡ್ ಮಾಡಲಾಗುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಅನೇಕ ಕ್ಲೌಡ್-ನೇಟಿವ್ ಪರಿಹಾರಗಳು ತಮ್ಮ ನಿಯಂತ್ರಣ ಪ್ಲೇನ್ ಘಟಕಗಳ ಸ್ಥಿತಿಯನ್ನು ನಿರ್ವಹಿಸಲು ರಾಫ್ಟ್ ಅನ್ನು ಬಳಸಿಕೊಳ್ಳುತ್ತವೆ.
ರಾಫ್ಟ್ನ ಅನುಕೂಲಗಳು ಮತ್ತು ಅನಾನುಕೂಲಗಳು
ರಾಫ್ಟ್ ಗಮನಾರ್ಹ ಪ್ರಯೋಜನಗಳನ್ನು ನೀಡುತ್ತದೆಯಾದರೂ, ಅದರ ರಾಜಿ-ವಿನಿಮಯಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಅತ್ಯಗತ್ಯ.
ಅನುಕೂಲಗಳು:
- ಸುಲಭವಾಗಿ ಅರ್ಥವಾಗುವಿಕೆ: ಅದರ ಪ್ರಾಥಮಿಕ ವಿನ್ಯಾಸದ ಗುರಿ, ಪ್ಯಾಕ್ಸೋಸ್ನಂತಹ ಹಳೆಯ ಸಹಮತ ಅಲ್ಗಾರಿದಮ್ಗಳಿಗಿಂತ ಅನುಷ್ಠಾನಗೊಳಿಸಲು, ಡೀಬಗ್ ಮಾಡಲು ಮತ್ತು ತಾರ್ಕಿಕವಾಗಿ ಯೋಚಿಸಲು ಸುಲಭವಾಗಿಸುತ್ತದೆ.
- ಬಲವಾದ ಸ್ಥಿರತೆ: ಕಮಿಟ್ ಆದ ಲಾಗ್ ನಮೂದುಗಳಿಗೆ ಬಲವಾದ ಸ್ಥಿರತೆ ಖಾತರಿಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ, ಡೇಟಾ ಸಮಗ್ರತೆ ಮತ್ತು ವಿಶ್ವಾಸಾರ್ಹತೆಯನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ.
-
ದೋಷ ಸಹಿಷ್ಣುತೆ: ಲಭ್ಯತೆ ಅಥವಾ ಸ್ಥಿರತೆಯನ್ನು ಕಳೆದುಕೊಳ್ಳದೆ ಅಲ್ಪಸಂಖ್ಯಾತ ನೋಡ್ಗಳ ವೈಫಲ್ಯವನ್ನು (ಒಂದು
N-ನೋಡ್ ಕ್ಲಸ್ಟರ್ನಲ್ಲಿ(N-1)/2ವೈಫಲ್ಯಗಳವರೆಗೆ) ಸಹಿಸಿಕೊಳ್ಳಬಲ್ಲದು. - ಕಾರ್ಯಕ್ಷಮತೆ: ಸ್ಥಿರ ಪರಿಸ್ಥಿತಿಗಳಲ್ಲಿ (ನಾಯಕನ ಬದಲಾವಣೆಗಳಿಲ್ಲದೆ), ರಾಫ್ಟ್ ಹೆಚ್ಚಿನ ಥ್ರೋಪುಟ್ ಅನ್ನು ಸಾಧಿಸಬಹುದು ಏಕೆಂದರೆ ನಾಯಕನು ಎಲ್ಲಾ ವಿನಂತಿಗಳನ್ನು ಅನುಕ್ರಮವಾಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತಾನೆ ಮತ್ತು ಸಮಾನಾಂತರವಾಗಿ ಪುನರಾವರ್ತಿಸುತ್ತಾನೆ, ನೆಟ್ವರ್ಕ್ ಬ್ಯಾಂಡ್ವಿಡ್ತ್ ಅನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಬಳಸಿಕೊಳ್ಳುತ್ತಾನೆ.
- ಚೆನ್ನಾಗಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಪಾತ್ರಗಳು: ಸ್ಪಷ್ಟ ಪಾತ್ರಗಳು (ನಾಯಕ, ಅನುಯಾಯಿ, ಅಭ್ಯರ್ಥಿ) ಮತ್ತು ಸ್ಥಿತಿ ಪರಿವರ್ತನೆಗಳು ಮಾನಸಿಕ ಮಾದರಿ ಮತ್ತು ಅನುಷ್ಠಾನವನ್ನು ಸರಳಗೊಳಿಸುತ್ತವೆ.
- ಕಾನ್ಫಿಗರೇಶನ್ ಬದಲಾವಣೆಗಳು: ಸ್ಥಿರತೆಯನ್ನು ರಾಜಿ ಮಾಡಿಕೊಳ್ಳದೆ ಕ್ಲಸ್ಟರ್ನಿಂದ ನೋಡ್ಗಳನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ಸೇರಿಸಲು ಅಥವಾ ತೆಗೆದುಹಾಕಲು ದೃಢವಾದ ಯಾಂತ್ರಿಕತೆಯನ್ನು (ಜಂಟಿ ಸಹಮತ) ನೀಡುತ್ತದೆ.
ಅನಾನುಕೂಲಗಳು:
- ನಾಯಕನ ಅಡಚಣೆ: ಎಲ್ಲಾ ಕ್ಲೈಂಟ್ ಬರವಣಿಗೆ ವಿನಂತಿಗಳು ನಾಯಕನ ಮೂಲಕವೇ ಹೋಗಬೇಕು. ಅತ್ಯಂತ ಹೆಚ್ಚಿನ ಬರವಣಿಗೆ ಥ್ರೋಪುಟ್ ಇರುವ ಸನ್ನಿವೇಶಗಳಲ್ಲಿ ಅಥವಾ ನಾಯಕರು ಕ್ಲೈಂಟ್ಗಳಿಂದ ಭೌಗೋಳಿಕವಾಗಿ ದೂರದಲ್ಲಿರುವಾಗ, ಇದು ಕಾರ್ಯಕ್ಷಮತೆಯ ಅಡಚಣೆಯಾಗಬಹುದು.
- ಓದುವ ಲೇಟೆನ್ಸಿ: ಬಲವಾಗಿ ಸ್ಥಿರವಾದ ಓದುವಿಕೆಗಳನ್ನು ಸಾಧಿಸಲು ಆಗಾಗ್ಗೆ ನಾಯಕನೊಂದಿಗೆ ಸಂವಹನದ ಅಗತ್ಯವಿರುತ್ತದೆ, ಸಂಭಾವ್ಯವಾಗಿ ಲೇಟೆನ್ಸಿಯನ್ನು ಸೇರಿಸುತ್ತದೆ. ಅನುಯಾಯಿಗಳಿಂದ ಓದುವುದು ಹಳೆಯ ಡೇಟಾದ ಅಪಾಯವನ್ನುಂಟುಮಾಡುತ್ತದೆ.
- ಕೋರಂ ಅವಶ್ಯಕತೆ: ಹೊಸ ನಮೂದುಗಳನ್ನು ಕಮಿಟ್ ಮಾಡಲು ಬಹುಪಾಲು ನೋಡ್ಗಳು ಲಭ್ಯವಿರಬೇಕು. 5-ನೋಡ್ ಕ್ಲಸ್ಟರ್ನಲ್ಲಿ, 2 ವೈಫಲ್ಯಗಳನ್ನು ಸಹಿಸಿಕೊಳ್ಳಬಹುದು. 3 ನೋಡ್ಗಳು ವಿಫಲವಾದರೆ, ಕ್ಲಸ್ಟರ್ ಬರವಣಿಗೆಗಳಿಗೆ ಲಭ್ಯವಿರುವುದಿಲ್ಲ. ಹೆಚ್ಚು ವಿಭಜಿತ ಅಥವಾ ಭೌಗೋಳಿಕವಾಗಿ ಹರಡಿರುವ ಪರಿಸರಗಳಲ್ಲಿ ಇದು ಸವಾಲಾಗಬಹುದು, ಅಲ್ಲಿ ಪ್ರದೇಶಗಳಾದ್ಯಂತ ಬಹುಮತವನ್ನು ನಿರ್ವಹಿಸುವುದು ಕಷ್ಟ.
- ನೆಟ್ವರ್ಕ್ ಸಂವೇದನೆ: ನೆಟ್ವರ್ಕ್ ಲೇಟೆನ್ಸಿ ಮತ್ತು ವಿಭಜನೆಗಳಿಗೆ ಹೆಚ್ಚು ಸಂವೇದನಾಶೀಲವಾಗಿದೆ, ಇದು ಚುನಾವಣಾ ಸಮಯ ಮತ್ತು ಒಟ್ಟಾರೆ ಸಿಸ್ಟಮ್ ಥ್ರೋಪುಟ್ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರಬಹುದು, ವಿಶೇಷವಾಗಿ ವ್ಯಾಪಕವಾಗಿ ವಿತರಿಸಿದ ನಿಯೋಜನೆಗಳಲ್ಲಿ.
- ಕಾನ್ಫಿಗರೇಶನ್ ಬದಲಾವಣೆಗಳ ಸಂಕೀರ್ಣತೆ: ದೃಢವಾಗಿದ್ದರೂ, ಜಂಟಿ ಸಹಮತ ಯಾಂತ್ರಿಕತೆಯು ರಾಫ್ಟ್ ಅಲ್ಗಾರಿದಮ್ನ ಹೆಚ್ಚು ಜಟಿಲವಾದ ಭಾಗಗಳಲ್ಲಿ ಒಂದಾಗಿದೆ, ಇದನ್ನು ಸರಿಯಾಗಿ ಅನುಷ್ಠಾನಗೊಳಿಸಲು ಮತ್ತು ಸಂಪೂರ್ಣವಾಗಿ ಪರೀಕ್ಷಿಸಲು ಕಷ್ಟ.
- ಏಕ ವೈಫಲ್ಯದ ಬಿಂದು (ಬರವಣಿಗೆಗಳಿಗಾಗಿ): ನಾಯಕನ ವೈಫಲ್ಯಕ್ಕೆ ದೋಷ ಸಹಿಷ್ಣುವಾಗಿದ್ದರೂ, ನಾಯಕ ಶಾಶ್ವತವಾಗಿ ಡೌನ್ ಆಗಿದ್ದರೆ ಮತ್ತು ಹೊಸ ನಾಯಕನನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಸಾಧ್ಯವಾಗದಿದ್ದರೆ (ಉದಾ., ನೆಟ್ವರ್ಕ್ ವಿಭಜನೆಗಳು ಅಥವಾ ಹಲವಾರು ವೈಫಲ್ಯಗಳಿಂದ), ಸಿಸ್ಟಮ್ ಬರವಣಿಗೆಗಳಲ್ಲಿ ಪ್ರಗತಿ ಸಾಧಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.
ತೀರ್ಮಾನ: ಸ್ಥಿತಿಸ್ಥಾಪಕ ಜಾಗತಿಕ ಸಿಸ್ಟಮ್ಗಳಿಗಾಗಿ ವಿತರಿಸಿದ ಸಹಮತದಲ್ಲಿ ಪಾಂಡಿತ್ಯ
ರಾಫ್ಟ್ ಅಲ್ಗಾರಿದಮ್ ಸಂಕೀರ್ಣ ಸಮಸ್ಯೆಗಳನ್ನು ಸರಳಗೊಳಿಸುವಲ್ಲಿ ಚಿಂತನಶೀಲ ವಿನ್ಯಾಸದ ಶಕ್ತಿಗೆ ಒಂದು ಸಾಕ್ಷಿಯಾಗಿ ನಿಂತಿದೆ. ಅದರ ಸುಲಭವಾಗಿ ಅರ್ಥವಾಗುವಿಕೆಯ ಮೇಲಿನ ಒತ್ತು ವಿತರಿಸಿದ ಸಹಮತವನ್ನು ಪ್ರಜಾಪ್ರಭುತ್ವೀಕರಣಗೊಳಿಸಿದೆ, ವ್ಯಾಪಕ ಶ್ರೇಣಿಯ ಡೆವಲಪರ್ಗಳು ಮತ್ತು ಸಂಸ್ಥೆಗಳಿಗೆ ಹಿಂದಿನ ವಿಧಾನಗಳ ನಿಗೂಢ ಸಂಕೀರ್ಣತೆಗಳಿಗೆ ಬಲಿಯಾಗದೆ ಹೆಚ್ಚು ಲಭ್ಯವಿರುವ ಮತ್ತು ದೋಷ-ಸಹಿಷ್ಣು ಸಿಸ್ಟಮ್ಗಳನ್ನು ನಿರ್ಮಿಸಲು ಅನುವು ಮಾಡಿಕೊಟ್ಟಿದೆ.
ಕುಬರ್ನೆಟಿಸ್ (etcd ಮೂಲಕ) ನೊಂದಿಗೆ ಕಂಟೇನರ್ ಕ್ಲಸ್ಟರ್ಗಳನ್ನು ಸಂಘಟಿಸುವುದರಿಂದ ಹಿಡಿದು, ಕಾಕ್ರೋಚ್ಡಿಬಿಯಂತಹ ಜಾಗತಿಕ ಡೇಟಾಬೇಸ್ಗಳಿಗೆ ಸ್ಥಿತಿಸ್ಥಾಪಕ ಡೇಟಾ ಸಂಗ್ರಹಣೆಯನ್ನು ಒದಗಿಸುವವರೆಗೆ, ರಾಫ್ಟ್ ಒಂದು ಮೌನ ಕೆಲಸಗಾರನಾಗಿದ್ದು, ನಮ್ಮ ಡಿಜಿಟಲ್ ಜಗತ್ತು ಸ್ಥಿರ ಮತ್ತು ಕಾರ್ಯನಿರ್ವಹಿಸುವಂತೆ ಖಚಿತಪಡಿಸುತ್ತದೆ. ರಾಫ್ಟ್ ಅನ್ನು ಅನುಷ್ಠಾನಗೊಳಿಸುವುದು ಒಂದು ಕ್ಷುಲ್ಲಕ ಕಾರ್ಯವಲ್ಲ, ಆದರೆ ಅದರ ನಿರ್ದಿಷ್ಟತೆಯ ಸ್ಪಷ್ಟತೆ ಮತ್ತು ಅದರ ಸುತ್ತಲಿನ ಪರಿಸರ ವ್ಯವಸ್ಥೆಯ ಸಮೃದ್ಧಿಯು ದೃಢವಾದ, ಸ್ಕೇಲೆಬಲ್ ಮೂಲಸೌಕರ್ಯದ ಮುಂದಿನ ಪೀಳಿಗೆಯನ್ನು ನಿರ್ಮಿಸಲು ಬದ್ಧರಾಗಿರುವವರಿಗೆ ಇದು ಒಂದು ಲಾಭದಾಯಕ ಪ್ರಯತ್ನವಾಗಿದೆ.
ಡೆವಲಪರ್ಗಳು ಮತ್ತು ಆರ್ಕಿಟೆಕ್ಟ್ಗಳಿಗೆ ಕ್ರಿಯಾತ್ಮಕ ಒಳನೋಟಗಳು:
- ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಆದ್ಯತೆ ನೀಡಿ: ಅನುಷ್ಠಾನವನ್ನು ಪ್ರಯತ್ನಿಸುವ ಮೊದಲು, ರಾಫ್ಟ್ನ ಪ್ರತಿಯೊಂದು ನಿಯಮ ಮತ್ತು ಸ್ಥಿತಿ ಪರಿವರ್ತನೆಯನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಸಮಯವನ್ನು ಹೂಡಿಕೆ ಮಾಡಿ. ಮೂಲ ಪೇಪರ್ ಮತ್ತು ದೃಶ್ಯ ವಿವರಣೆಗಳು ಅಮೂಲ್ಯವಾದ ಸಂಪನ್ಮೂಲಗಳಾಗಿವೆ.
- ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಲೈಬ್ರರಿಗಳನ್ನು ಬಳಸಿಕೊಳ್ಳಿ: ಹೆಚ್ಚಿನ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ, ನಿಮ್ಮ ಅವಶ್ಯಕತೆಗಳು ಹೆಚ್ಚು ವಿಶೇಷವಾಗದಿದ್ದರೆ ಅಥವಾ ನೀವು ಶೈಕ್ಷಣಿಕ ಸಂಶೋಧನೆ ನಡೆಸುತ್ತಿಲ್ಲದಿದ್ದರೆ, ಮೊದಲಿನಿಂದ ನಿರ್ಮಿಸುವ ಬದಲು, ಚೆನ್ನಾಗಿ ಪರಿಶೀಲಿಸಿದ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ರಾಫ್ಟ್ ಅನುಷ್ಠಾನಗಳನ್ನು (ಉದಾ., etcd, HashiCorp's Raft library) ಬಳಸುವುದನ್ನು ಪರಿಗಣಿಸಿ.
- ಕಠಿಣ ಪರೀಕ್ಷೆಯು ಚೌಕಾಸಿಗೆ ಒಳಪಡುವುದಿಲ್ಲ: ದೋಷ ಇಂಜೆಕ್ಷನ್, ಪ್ರಾಪರ್ಟಿ-ಆಧಾರಿತ ಪರೀಕ್ಷೆ, ಮತ್ತು ವೈಫಲ್ಯದ ಸನ್ನಿವೇಶಗಳ ವ್ಯಾಪಕ ಸಿಮ್ಯುಲೇಶನ್ ಯಾವುದೇ ವಿತರಿಸಿದ ಸಹಮತ ಸಿಸ್ಟಮ್ಗೆ ಅತ್ಯಂತ ಮುಖ್ಯವಾಗಿದೆ. ಅದನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಮುರಿಯದೆ "ಅದು ಕೆಲಸ ಮಾಡುತ್ತದೆ" ಎಂದು ಎಂದಿಗೂ ಭಾವಿಸಬೇಡಿ.
- ಜಾಗತಿಕ ಲೇಟೆನ್ಸಿಗಾಗಿ ವಿನ್ಯಾಸಗೊಳಿಸಿ: ಜಾಗತಿಕವಾಗಿ ನಿಯೋಜಿಸುವಾಗ, ವಿವಿಧ ಭೌಗೋಳಿಕ ಪ್ರದೇಶಗಳಲ್ಲಿ ಸ್ಥಿರತೆ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆ ಎರಡನ್ನೂ ಅತ್ಯುತ್ತಮವಾಗಿಸಲು ನಿಮ್ಮ ಕೋರಂ ನಿಯೋಜನೆ, ನೆಟ್ವರ್ಕ್ ಟೋಪೋಲಜಿ, ಮತ್ತು ಕ್ಲೈಂಟ್ ಓದುವ ತಂತ್ರಗಳನ್ನು ಎಚ್ಚರಿಕೆಯಿಂದ ಪರಿಗಣಿಸಿ.
-
ಸ್ಥಿರತೆ ಮತ್ತು ಬಾಳಿಕೆ: ನಿಮ್ಮ ಆಧಾರವಾಗಿರುವ ಶೇಖರಣಾ ಪದರವು ದೃಢವಾಗಿದೆ ಮತ್ತು ಕ್ರ್ಯಾಶ್ ಸನ್ನಿವೇಶಗಳಲ್ಲಿ ಡೇಟಾ ನಷ್ಟವನ್ನು ತಡೆಯಲು
fsyncಅಥವಾ ಸಮಾನವಾದ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಸರಿಯಾಗಿ ಬಳಸಲಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.
ವಿತರಿಸಿದ ಸಿಸ್ಟಮ್ಗಳು ವಿಕಸನಗೊಳ್ಳುತ್ತಲೇ ಇರುವುದರಿಂದ, ರಾಫ್ಟ್ನಿಂದ ಮೂರ್ತಿವೆತ್ತ ತತ್ವಗಳು—ಸ್ಪಷ್ಟತೆ, ದೃಢತೆ, ಮತ್ತು ದೋಷ ಸಹಿಷ್ಣುತೆ—ವಿಶ್ವಾಸಾರ್ಹ ಸಾಫ್ಟ್ವೇರ್ ಇಂಜಿನಿಯರಿಂಗ್ನ ಮೂಲಾಧಾರಗಳಾಗಿ ಉಳಿಯುತ್ತವೆ. ರಾಫ್ಟ್ನಲ್ಲಿ ಪಾಂಡಿತ್ಯ ಸಾಧಿಸುವ ಮೂಲಕ, ವಿತರಿಸಿದ ಕಂಪ್ಯೂಟಿಂಗ್ನ ಅನಿವಾರ್ಯ ಅವ್ಯವಸ್ಥೆಯನ್ನು ತಡೆದುಕೊಳ್ಳಬಲ್ಲ ಸ್ಥಿತಿಸ್ಥಾಪಕ, ಜಾಗತಿಕವಾಗಿ ಸ್ಕೇಲೆಬಲ್ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸಲು ನೀವು ಒಂದು ಶಕ್ತಿಯುತ ಸಾಧನವನ್ನು ನಿಮ್ಮದಾಗಿಸಿಕೊಳ್ಳುತ್ತೀರಿ.